it-swarm.com.de

Wie installiere / ändere ich das Gebietsschema auf Debian?

Ich habe eine Webanwendung geschrieben, für die die Benutzeroberfläche auf Niederländisch ist. Ich verwende die Datums- und Zeitroutinen des Systems, um Datumszeichenfolgen in der Anwendung zu formatieren. Die Datumszeichenfolgen der Systemformate sind jedoch in Englisch, ich möchte sie jedoch in Niederländisch, daher muss ich das Gebietsschema des Systems festlegen. Wie mache ich das auf Debian? Ich habe 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 das Einstellen 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?

67
Hongli Lai

Bearbeiten Sie /etc/default/locale Und setzen Sie den Inhalt auf:

LANG="nl_NL.UTF-8"

Sie können überprüfen, welche Gebietsschemas Sie aktuell generiert haben, indem Sie:

# locale -a

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

# locale-gen

Eine Liste der unterstützten Gebietsschemas finden Sie unter /usr/share/i18n/SUPPORTED

Weitere Informationen finden Sie im Debian-Wiki .

77
David Pashley

Möglicherweise müssen Sie das Paket locales installieren. Hier werden Sie gefragt, welche Gebietsschemas generiert werden sollen. Wenn es bereits installiert ist, dann dpkg-reconfigure locales können Sie weitere Gebietsschemas generieren.

68
pgs

Die Antworten hier sind unvollständig wie bei den meisten anderen. Nachdem ich Informationen von einigen Stellen zusammengesetzt hatte, funktionierte es für mich, (1) sicherzustellen, dass das gewünschte Gebietsschema verfügbar war (es zu generieren, wenn dies nicht der Fall war), und dann (2) umgebungsbezogene Umgebungsvariablen auf das gewünschte Gebietsschema zu setzen.

In meinem Fall brauchte ich en_US.UTF-8 programmgesteuert (d. h. nicht interaktiv) in einem Docker-Container installiert. Das ff hat das erreicht, 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

Auf derselben Shell müssen Sie source ~/.bashrc damit die env vars sofort wirksam werden. Sie können überprüfen, ob das Gebietsschema korrekt konfiguriert wurde, indem Sie locale aufrufen.

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 tatsächlich hilfreich. Kredit, bei dem Kredit fällig ist:

17
Czar

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

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 Erhalten, d. H. Keine Gebietsschemas generiert (keine aufgelistet):

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

Das Ausführen von dpkg-reconfigure locales Und das Auswählen einiger Gebietsschemas hat /etc/locale.gen Nicht wie erwartet aktualisiert.

Als ich diese Datei jedoch manuell änderte und die gewünschten Gebietsschemas auskommentierte, funktionierte locale-gen Richtig:

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

Ich konnte auch Gebietsschemas wie folgt manuell 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

Dies war jedoch keine dauerhafte Lösung: Ich habe festgestellt, dass durch Ausführen von locale-gen Ohne die Option --keep-existing Alle manuell erstellten Gebietsschemas gelöscht werden, dh jedes Gebietsschema, das nicht in /etc/locale.gen.

6
qris

Für eine Webanwendung ist es möglicherweise besser, setlocale () innerhalb des Programms zu verwenden, als die Standardeinstellung des Systems zu verlangen Gebietsschema außerhalb angemessen eingestellt werden. Weniger lose Enden auf diese Weise.

3
SamB

Für diejenigen, die wie ich unter Ubuntu 14.04 LTS irgendwie keine /etc/locale.gen - Datei haben, können Sie ein neues Gebietsschema in /var/lib/locales/supported.d/local Hinzufügen und dann ausführen:

Sudo dpkg-reconfigure locales

Sie können auch das französische Gebietsschema (zum Beispiel) auf diese Weise hinzufügen (anstatt /var/lib/locales/supported.d/local Zu bearbeiten):

Sudo locale-gen fr_FR fr_FR.UTF-8

um die Codesätze ISO-8859-1 und UTF-8 des Gebietsschemas fr_FR hinzuzufügen und zu generieren, geben Sie Folgendes ein:

Sudo dpkg-reconfigure locales

um den Job zu beenden

1
SebMa

Aber zuerst muss das Sprachpaket installiert sein. Auf meinem in Deutschland ansässigen VPS war kein Englisch-Sprachpaket vorinstalliert. Überprüfen Sie zunächst, ob Sie es installiert haben:

aptitude install language-pack-en
1
valentt