Normalerweise laufe ich aptitude -y install locales
dann dpkg-reconfigure locales
, um das Gebietsschema einzurichten.
Jetzt möchte ich es in ein Shell-Skript einfügen. Wie kann ich Folgendes zuverlässig ausführen, automatisch / nicht interaktiv?
- Wählen Sie
en_US.UTF-8
und legen Sie es als Systemstandard fest - Deaktivieren Sie alle anderen Gebietsschemas
- (Optional) Überprüfen Sie, ob
/etc/default/locale
derLANG=en_US.UTF-8
erwartete Eintrag nur einmal vorhanden ist
File "/usr/share/apt-listchanges/ALChacks.py", line 32, in <module> sys.stderr.write(_("Can't set locale; make sure $LC_* and $LANG are correct!\n"))
...locale-gen --purge en_GB.UTF-8
eine Neuinstallation ausführen , erhalten Sie diese unerwartete Ausgabe:Generating locales (this might take a while)... en_US.UTF-8... done Generation complete.
Gibt es Ideen, wie Sie die Liste der Gebietsschemas so einstellen können, wie Sie es in dpkg-reconfigure locales nicht interaktiv tun?Konnte die obige Antwort nicht zum Laufen bringen. Stattdessen verwende ich diese Methode (für Dockerfiles):
quelle
en_GB.UTF-8
Gebietsschema in CircleCI einrichten - das war die beste Antwort, die funktioniert hat. In der Hoffnung, dass Google dies aufgrund dieses Kommentars als relevant anzeigt, wenn Leute versuchen, nach dem Problem zu suchen, das ich hatte.Um die Zeitzone und das Gebietsschema nicht interaktiv aus einem Skript heraus neu zu konfigurieren, funktioniert für mich Folgendes (unter Debian):
Zum Konfigurieren der Zeitzone erstelle ich '/ etc / localtime' als Softlink zur entsprechenden zoneinfo- Datei im Verzeichnis '/ usr / share / zoneinfo'. Dann führe ich den Befehl dpkg-reconfigure aus und alles wird eingerichtet. Um beispielsweise die Zeitzone "Europa / Brüssel" einzurichten:
(Beachten Sie, dass die AREA ein Unterverzeichnis unter '/ usr / share / info' und die ZONE eine Datei unter dem AREA-Unterverzeichnis ist.)
Zum Konfigurieren der Ländereinstellungen führe ich zuerst ein sed- Skript aus, mit dem eine neue Kopie der Datei '/etc/locale.gen' erstellt wird, die auf dem Inhalt der Datei '/ usr / share / i18n / SUPPORTED' basiert. Jede Zeile aus der Eingabedatei wird kopiert, aber in einen Kommentar umgewandelt, es sei denn, es handelt sich um einen Eintrag eines UTF-8-Gebietsschemas für eine Sprache, die ich auf meinem System verfügbar machen möchte (z. B. Englisch, Niederländisch, Französisch, und Deutsch):
Als Nächstes setze ich das Standardumgebungsgebietsschema in der Debconf-Datenbank, z. B. auf Britisches Englisch :
Anschließend entferne ich die vorhandene Datei '/ etc / default / locale' (nur um sicherzustellen, dass der alte Inhalt meine neuen Einstellungen nicht beeinträchtigt) und führe den Befehl dpkg-reconfigure aus , um alle Ländereinstellungen zu generieren, die das sed- Skript ausgewählt hat , und um eine neue '/ etc / default / locale'-Datei mit nur einem Eintrag zu erstellen, um die' LANG'-Variable auf mein ausgewähltes Standardumgebungsgebietsschema zu setzen:
Abhängig von meinen Anforderungen möchte ich möglicherweise einige Befehle zum Aktualisieren des Gebietsschemas ausführen, um z. B. die Variablen zu überschreiben, die sich auf die Formatierung von Werten auswirken, und sie auf ein anderes Gebietsschema festzulegen (z. B. irisches Englisch ):
(Ich hätte alle diese Parameter bei einem einzigen Aufruf des Befehls update-locale angeben können , aber anscheinend ist die Reihenfolge, in der die Einträge in die Datei '/ etc / default / locale' geschrieben werden, nicht vorhersehbar, wenn ich dies tue bevorzuge, dass sie immer in der gleichen Reihenfolge sind, weshalb ich sie einzeln generiere.)
Und schließlich möchte ich möglicherweise den Befehl update-locale ein letztes Mal ausführen , um die Variable LANGUAGE (dh die Liste der Sprachen, in denen übersetzbare Textnachrichten angezeigt werden sollen) einzurichten:
Wenn Sie all dies in einem Bash-Skript zusammenfassen, können Sie Ihre Gebietsschemaeinstellungen mit einem einfachen Skriptlauf neu konfigurieren, der keine weitere Benutzerinteraktion erfordert.
Nach meiner Erfahrung werden die neuen Einstellungen jedoch erst vollständig aktiviert, nachdem Sie Ihr System zweimal neu gestartet haben (zumindest unter Debian Jessie Xfce). Nach dem ersten Neustart übernimmt der Anmeldungsmanager die neuen Einstellungen in Ordnung. Nach der Anmeldung verwendet Ihre Benutzersitzung jedoch weiterhin die alten Einstellungen. Nach dem zweiten Neustart übernimmt Ihre Benutzersitzung auch die neuen Einstellungen.
quelle
Basierend auf der guten Arbeit in der Antwort von @ EirikW. Speziell für ein
Dockerfile
:quelle
Für mich war es notwendig, die zusätzlichen 3 ENV-Vars einzustellen:
Vielen Dank jedoch an ErikWs für seine Antwort: ( https://serverfault.com/a/689947 )
quelle