Wie installiere / ändere ich das Gebietsschema unter Debian?

65

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 der Systemformate sind jedoch in Englisch, ich möchte sie jedoch in Niederländisch, daher muss das Gebietsschema des Systems festgelegt werden. Wie mache ich das unter Debian? Ich habe versucht einzustellen, LC_ALL=nl_NLaber es scheint keinen Effekt 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 Setzen von LC_ALL auf meinem Ubuntu-Desktop-System gut funktioniert. Muss ich zusätzliche Pakete installieren, damit dies funktioniert, oder mache ich es völlig falsch?

Hongli Lai
quelle
Gibt es eine Möglichkeit, dies automatisch basierend auf der zugewiesenen IP-Adresse des Servers zu tun?
Scoop
2
Einstellen Debian Locale der normale Weg : sudo dpkg-reconfigure locales.
Paul Rougieux

Antworten:

72

Bearbeiten /etc/default/localeund stellen Sie den Inhalt auf:

LANG="nl_NL.UTF-8"

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

# locale -a

Sie können mehr generieren, indem Sie /etc/locale.gendie Zeilen für die zu aktivierenden Gebietsschemas bearbeiten und 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

Es gibt weitere Informationen im Debian-Wiki .

David Pashley
quelle
9
/ var / lib / belocs / list existiert nicht. Sie müssen stattdessen /etc/locale.gen bearbeiten oder dpkg-reconfigure locales ausführen.
S.
+1 diese Antwort für die Beschreibung von locale-gen, aber gemäß dem vorherigen Kommentar gibt es keine solche Datei wie / var / lib / belocs / list auf meinem System
telent
Ich habe 5 Stunden gebraucht, um diese Antwort zu finden, die perfekt war. Darüber hinaus ermöglicht es Aliase zu machen: en_US UTF-8 und it_IT UFT-8 erlaubte mir meine Schauplätze in UTF-8 zu haben , standardmäßig, das ist toll , wenn Sie PHP - Code, der auf locales hängt
Cec
Gibt es einen Befehl oder ein Paket, mit dem der Inhalt von / etc / default / locale bearbeitet und festgelegt werden kann?
Karl Morrison
Siehe Antwort unten von Zar. Du kannst es so machen: sed -i 's / ^ # * (de_DE.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner
66

Möglicherweise müssen Sie das localesPaket installieren . Hier werden Sie gefragt, welche Gebietsschemas generiert werden sollen. Wenn es bereits installiert ist, dpkg-reconfigure localeskönnen Sie weitere Gebietsschemas erstellen.

pgs
quelle
Dadurch werden nur Gebietsschemas generiert und nicht die Systemstandardeinstellungen festgelegt.
David Pashley
16
NEIN, die letzte Frage von dpkg-reconfigure locales ist die Auswahl des Standardgebietsschemas.
S.
2
Ich musste es mit sudowie in laufen sudo dpkg-reconfigure locales.
Alex Yursha
Wenn es sich um einen Server handelt, auf den über ssh zugegriffen wird, empfiehlt die Debian-Wiki-Seite unter locales , das Standard-Gebietsschema auf zu belassen NONE.
Paul Rougieux
1
Das war genau das, was ich brauchte: Mit wenigen Tastenanschlägen alle Ländereinstellungen installieren. Ich danke dir sehr!
Aexl
11

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

In meinem Fall musste ich en_US.UTF-8programmgesteuert (dh nicht interaktiv) in einem Docker-Container installiert werden. 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 dies tun, source ~/.bashrcdamit die Umgebungsvariablen sofort wirksam werden. Sie können überprüfen, ob das Gebietsschema korrekt konfiguriert wurde, indem Sie 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 Q & A-Einträge zu diesem Thema, aber nur wenige waren tatsächlich hilfreich. Gutschrift bei Fälligkeit der Gutschrift:

Zar
quelle
6

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

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

Ich habe immer die folgende Ausgabe von erhalten locale-gen, dh keine Gebietsschemas generiert (keine aufgeführt):

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

Das Ausführen dpkg-reconfigure localesund Auswählen einiger Gebietsschemas wurde nicht /etc/locale.genwie erwartet aktualisiert .

Als ich diese Datei jedoch manuell änderte und die von mir gewünschten Ländereinstellungen auskommentierte, begann ich locale-genordnungsgemäß 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 auch Ländereinstellungen 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 stellte fest, dass das Ausführen locale-genohne die --keep-existingOption alle manuell generierten Gebietsschemas löscht, dh alle Gebietsschemas, die nicht in aufgeführt (und nicht kommentiert) sind /etc/locale.gen.

qris
quelle
3

Für eine Web - Anwendung, könnte es besser sein zu verwenden setlocale () innerhalb des Programms, anstatt zu verlangen , dass das System Standardgebietsschema entsprechend außerhalb eingestellt werden. So endet weniger locker.

SamB
quelle
1
Wenn für das System kein Gebietsschema erforderlich ist, funktioniert dies nicht setlocale.
Der Pate
1

Aber zuerst muss ein Sprachpaket installiert sein. Auf meinem deutschsprachigen VPS war kein englisches Sprachpaket vorinstalliert. So überprüfen Sie zuerst, ob Sie es installiert haben:

aptitude install language-pack-en
valentt
quelle
1

Für diejenigen, die wie ich auf Ubuntu 14.04 LTS irgendwie keine /etc/locale.genDatei haben, können Sie ein neues Gebietsschema hinzufügen /var/lib/locales/supported.d/localund dann ausführen:

sudo dpkg-reconfigure locales

Sie können das französische Gebietsschema auch folgendermaßen hinzufügen (anstatt es zu bearbeiten /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

Um die ISO-8859-1und UTF-8Codesätze des fr_FRGebietsschemas hinzuzufügen und zu generieren, geben Sie schließlich Folgendes ein :

sudo dpkg-reconfigure locales

um den Job zu beenden

SebMa
quelle