Zazwyczaj biegam aptitude -y install locales
następnie dpkg-reconfigure locales
skonfigurować ustawienia regionalne.
Teraz chcę umieścić go w skrypcie powłoki, jak mogę w sposób niezawodny wykonywać następujące czynności automatycznie / nieinteraktywnie?
- Wybierz
en_US.UTF-8
i ustaw jako domyślny system - Wyłącz wszystkie inne ustawienia regionalne
- (Opcjonalnie) Sprawdź, czy
/etc/default/locale
zawiera jednorazowy wpis zgodny zLANG=en_US.UTF-8
oczekiwaniami
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
czystą instalację, otrzymasz nieoczekiwany wynik:Generating locales (this might take a while)... en_US.UTF-8... done Generation complete.
Jakieś pomysły, jak ustawić listę ustawień narodowych tak, jak robisz w dpkg-rekonfiguruj ustawienia regionalne nieinteraktywnie?Nie można uzyskać powyższej odpowiedzi do działania. Zamiast tego używam tej metody (w przypadku plików Docker):
źródło
en_GB.UTF-8
skonfigurowane ustawienia regionalne w CircleCI - to była najlepsza odpowiedź, która działała. Mając nadzieję, że z powodu tego komentarza Google może pokazać, że jest to istotne, gdy ludzie próbują wyszukać problem, który miałem.Aby zmienić konfigurację strefy czasowej i ustawień regionalnych w sposób nieinteraktywny, z poziomu skryptu, oto, co działa dla mnie (pod Debianem):
Aby skonfigurować strefę czasową, najpierw tworzę „/ etc / localtime” jako miękki link do odpowiedniego pliku zoneinfo w katalogu „/ usr / share / zoneinfo”. Następnie uruchamiam polecenie dpkg-rekonfiguruj i wszystko zostanie wprowadzone na miejsce. Aby na przykład skonfigurować strefę czasową „Europa / Bruksela”:
(Zauważ, że AREA to podkatalog w „/ usr / share / info”, a ZONE to plik w podkatalogu AREA).
Aby skonfigurować ustawienia narodowe, najpierw uruchamiam skrypt sed , który utworzy nową kopię pliku „/etc/locale.gen” na podstawie zawartości pliku „/ usr / share / i18n / SUPPORTED”. Każdy wiersz z pliku wejściowego zostanie skopiowany, ale zostanie przekształcony w komentarz, chyba że jest to wpis ustawień regionalnych UTF-8 dla języka, który chcę udostępnić w moim systemie (np. Angielski, holenderski, francuski, i niemiecki):
Następnie ustawiam domyślne ustawienia regionalne środowiska w bazie danych debconf, np. Na brytyjski angielski :
Następnie usuwam istniejący plik „/ etc / default / locale” (aby upewnić się, że jego stara zawartość nie będzie kolidować z moimi nowymi ustawieniami) i uruchamiam polecenie dpkg-rekonfiguruj, aby wygenerować wszystkie ustawienia narodowe wybrane przez skrypt sed , i aby utworzyć nowy plik „/ etc / default / locale” z samym wpisem, aby ustawić zmienną „LANG” na wybrane przeze mnie domyślne ustawienia regionalne środowiska:
Następnie, w zależności od moich wymagań, mogę chcieć uruchomić kilka poleceń locale aktualizacji , aby zastąpić np. Zmienne wpływające na formatowanie wartości i ustawić je na inne locale (takie jak irlandzki angielski ):
(Mógłbym określić wszystkie te parametry przy jednym wywołaniu polecenia update-locale , ale najwyraźniej kolejność zapisywania wpisów w pliku „/ etc / default / locale” jest nieprzewidywalna, jeśli to zrobię. wolę, aby zawsze były w tej samej kolejności, dlatego generuję je jeden po drugim).
I na koniec, mogę chcieć uruchomić locale aktualizacji po raz ostatni , aby skonfigurować zmienną LANGUAGE (tj. Listę języków, w których chcę wyświetlać przetłumaczalne wiadomości tekstowe):
Rzuć to wszystko razem w skrypt bash, a będziesz mógł łatwo zmienić ustawienia regionalne za pomocą prostego uruchomienia skryptu, który nie będzie wymagał dalszej interakcji użytkownika.
Z mojego doświadczenia wynika jednak, że nowe ustawienia nie zostaną całkowicie aktywowane, dopóki nie uruchomisz ponownie systemu dwa razy (przynajmniej na Debian Jessie Xfce). Po pierwszym ponownym uruchomieniu menedżer logowania przejmie nowe ustawienia w porządku, ale po zalogowaniu sesja użytkownika będzie nadal korzystać ze starych ustawień; następnie po drugim ponownym uruchomieniu sesja użytkownika również przyjmie nowe ustawienia.
źródło
Na podstawie dobrej pracy w odpowiedzi @ EirikW. Specyficzne dla
Dockerfile
:źródło
Dla mnie konieczne było ustawienie dodatkowych 3 zmiennych ENV:
Jednak dzięki ErikWs za odpowiedź: ( https://serverfault.com/a/689947 )
źródło