Frage Wie installiere / ändere ich das Gebietsschema auf Debian?


Ich habe eine Webanwendung geschrieben, deren Benutzeroberfläche auf Niederländisch ist. Ich verwende die Datums- und Zeitroutinen des Systems, um Datumszeichenfolgen in der Anwendung zu formatieren. Die Datumszeichenfolgen, die die Systemformate in Englisch sind, aber ich möchte sie in Niederländisch, also muss ich das Gebietsschema des Systems festlegen. Wie mache ich das auf Debian? Ich habe es versucht LC_ALL=nl_NL aber es scheint keine Wirkung zu haben:

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

Ich erinnere mich, dass die Einstellung von LC_ALL auf meinem Ubuntu-Desktop-System gut funktioniert. Muss ich zusätzliche Pakete installieren, damit dies funktioniert, oder mache ich das völlig falsch?


58
2017-08-15 14:42


Ursprung


Gibt es eine Möglichkeit, dies automatisch anhand der zugewiesenen IP-Adresse des Servers zu tun? - Scoop
Debian-Gebietsschema auf die übliche Weise einstellen: sudo dpkg-reconfigure locales. - Paul Rougieux


Antworten:


Bearbeiten /etc/default/locale und setze den Inhalt auf:

LANG="nl_NL.UTF-8"

Sie können überprüfen, welche Gebietsschemata Sie gerade erstellt haben:

# locale -a

Sie können mehr durch Bearbeiten erzeugen /etc/locale.gen Auskommentieren der Zeilen für die Gebietsschemas, die Sie aktivieren möchten. Dann können Sie sie generieren, indem Sie Folgendes ausführen:

# locale-gen

Sie können eine Liste der unterstützten Ländereinstellungen in finden /usr/share/i18n/SUPPORTED

Es gibt mehr Informationen über die Debian-Wiki.


60
2017-08-15 15:56



/ var / lib / belocs / list existiert nicht. Sie müssen stattdessen /etc/locale.gen bearbeiten oder dpkg-reconfigure locales ausführen. - pgs
+1 diese Antwort für die Beschreibung von locale-gen, aber wie im vorherigen Kommentar, gibt es keine Datei wie / var / lib / belocs / list auf meinem System - telent
Ich brauchte 5 Stunden um diese Antwort zu finden, die perfekt war. Außerdem erlaubt es Aliase zu machen: en_US UTF-8 und it_IT UFT-8 erlaubten mir, meine Locales standardmäßig in UTF-8 zu haben, was großartig ist, wenn Sie PHP-Code haben, der von Gebietsschemata abhängt - Cec
Gibt es einen Befehl oder ein Paket, das den Inhalt von / etc / default / locale bearbeiten und einstellen kann? - Karl Morrison
Siehe Antwort unten von Zar. Du kannst es wie folgt machen: sed -i 's / ^ # * (de_DE.UTF-8) / \ 1 /' /etc/locale.gen - Tobias Gaertner


Möglicherweise müssen Sie das installieren locales Paket. Sie werden gefragt, welche Ländereinstellungen generiert werden sollen. Wenn es bereits installiert ist, dann dpkg-reconfigure locales können Sie mehr Gebietsschemas erzeugen.


63
2017-08-15 15:47



Das generiert nur Gebietsschemata, nicht den Systemstandard. - David Pashley
NEIN, die letzte Frage von dpkg-reconfigure locales besteht darin, das Standardgebietsschema auszuwählen. - pgs
Ich musste es laufen lassen sudo wie in sudo dpkg-reconfigure locales. - Alex Yursha
Wenn es sich um einen Server handelt, auf den über ssh zugegriffen wird die Debian-Wiki-Seite zu den Gebietsschemas empfiehlt, das Standardgebietsschema auf "Verlassen" zu belassen NONE. - Paul Rougieux
Das war genau das, was ich brauchte: alle Locales mit nur wenigen Tastenanschlägen installieren. Ich danke dir sehr! - aexl


Keine dieser Antworten funktionierte für mich, auf einem LXC-Container installiert mit:

lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --arch i386

Ich habe immer die folgende Ausgabe von locale-gen, d. h. keine Gebietsschemata erzeugen (keine aufgelistet):

$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.

Laufen dpkg-reconfigure locales und die Auswahl einiger Ländereinstellungen wurde nicht aktualisiert /etc/locale.gen wie ich es erwartet habe.

Wenn ich diese Datei jedoch manuell änderte und die von mir gewünschten Gebietsschemas auskommentierte, dann locale-gen fing an, richtig zu arbeiten:

$ sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.

Ich konnte Locales auch manuell wie folgt generieren:

sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8

Aber das war keine dauerhafte Lösung: Ich fand das Laufen locale-gen ohne das --keep-existing Die Option löscht alle manuell erzeugten Gebietsschemata, d. h. jedes Gebietsschema, das nicht in (nicht kommentar) aufgeführt ist /etc/locale.gen.


6
2018-05-24 14:54





Die Antworten hier sind unvollständig wie bei anderen. Nach dem Zusammenfügen von Informationen von einigen Stellen funktionierte für mich (1) sicherzustellen, dass das Gebietsschema, das ich wollte, verfügbar war (erzeuge es, wenn es nicht war), dann (2) Gebietsschema-bezogene Umgebungsvariablen auf das gewünschte Gebietsschema setzen.

In meinem Fall brauchte ich en_US.UTF-8 programmatisch (d. h. nicht interaktiv) in einem Andock-Container installiert. Das ff erfüllt, was ich brauche, aber es sollte in einer interaktiven Shell gut funktionieren.

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

In der gleichen Shell müssen Sie tun source ~/.bashrc damit die Umgebung sofort wirksam wird. Sie können überprüfen, ob das Gebietsschema korrekt konfiguriert wurde, indem Sie es aufrufen locale.

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Es gab viele Fragen und Antworten zu diesem Thema, aber nur wenige waren wirklich hilfreich. Kredit, wo Kredit fällig ist:


6
2018-01-29 03:58





Für eine Webanwendung könnte es besser sein, sie zu verwenden Setlocale() Innerhalb das Programm, anstatt dass das Standardgebietsschema des Systems entsprechend außerhalb festgelegt werden muss. Weniger locker endet auf diese Weise.


3
2018-02-07 23:00



Wenn das System nicht das erforderliche Gebietsschema hat, dann setlocale wird nicht funktionieren. - The Godfather


Aber zuerst müssen Sie das Sprachpaket installiert haben. Auf meinem deutschen VPS war kein Englisch-Sprachpaket vorinstalliert. Also zuerst überprüfen Sie, ob Sie es installiert haben:

aptitude install language-pack-en

1
2018-04-20 17:14