Jak zainstalować / zmienić ustawienia regionalne w Debianie?

65

Napisałem aplikację internetową, dla której interfejs użytkownika jest w języku niderlandzkim. Korzystam z systemowych procedur daty i godziny do formatowania ciągów dat w aplikacji. Jednak data ciągi formatów systemu są w języku angielskim, ale chcę je w języku niderlandzkim, więc muszę ustawić ustawienia regionalne systemu. Jak to zrobić na Debianie? Próbowałem ustawienia, LC_ALL=nl_NLale wydaje się, że nie ma to żadnego wpływu:

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

Pamiętam, że ustawienie LC_ALL w moim systemie Ubuntu działa dobrze. Czy muszę zainstalować dodatkowe pakiety, aby to działało, czy robię to całkowicie źle?

Hongli Lai
źródło
czy istnieje sposób, aby to zrobić automatycznie na podstawie przypisanego adresu IP serwera?
Scoop,
2
Ustawianie Debian Locale standardowy sposób : sudo dpkg-reconfigure locales.
Paul Rougieux,

Odpowiedzi:

72

Edytuj /etc/default/localei ustaw zawartość na:

LANG="nl_NL.UTF-8"

Możesz sprawdzić, które lokalizacje aktualnie wygenerowałeś, używając:

# locale -a

Możesz wygenerować więcej, edytując /etc/locale.geni usuwając komentarz z wierszy dla ustawień regionalnych, które chcesz włączyć. Następnie możesz je wygenerować, uruchamiając:

# locale-gen

Listę obsługiwanych ustawień regionalnych można znaleźć w /usr/share/i18n/SUPPORTED

Więcej informacji jest dostępnych na wiki Debiana .

David Pashley
źródło
9
/ var / lib / belocs / list nie istnieje. Musisz edytować plik /etc/locale.gen lub zamiast tego uruchomić dpkg-rekonfigurować ustawienia narodowe.
str.
+1 tej odpowiedzi za opisanie locale-gen, ale zgodnie z poprzednim komentarzem w moim systemie nie ma takiego pliku jak / var / lib / belocs / list
telent
Znalezienie tej odpowiedzi zajęło mi 5 godzin, co okazało się idealne. Co więcej, pozwala tworzyć aliasy: en_US UTF-8 i it_IT UFT-8 domyślnie pozwalały mi mieć moje ustawienia narodowe w UTF-8, co jest świetne, jeśli masz kod PHP, który zależy od ustawień
narodowych
Czy istnieje polecenie lub pakiet, który może edytować i ustawiać zawartość pliku / etc / default / locale?
Karl Morrison
Zobacz odpowiedź poniżej z Czar. Możesz to zrobić w następujący sposób: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner
66

Może być konieczne zainstalowanie localespakietu. Zostaniesz zapytany, które lokalizacje wygenerować. Jeśli jest już zainstalowany, dpkg-reconfigure localespozwoli Ci wygenerować więcej ustawień narodowych.

pgs
źródło
To tylko generuje ustawienia narodowe, a nie ustawia domyślnych ustawień systemu.
David Pashley,
16
NIE, ostatnim pytaniem o locale rekonfiguracji dpkg jest wybranie domyślnych ustawień regionalnych.
str.
2
Musiałem uruchomić z sudojak w sudo dpkg-reconfigure locales.
Alex Yursha
Jeśli jest to serwer dostępny za pośrednictwem ssh, strona wiki Debiana w ustawieniach regionalnych zaleca pozostawienie domyślnych ustawień regionalnych ustawionych na NONE.
Paul Rougieux,
1
Właśnie tego potrzebowałem: zainstaluj wszystkie ustawienia regionalne w zaledwie kilku naciśnięciach klawiszy. Dziękuję bardzo!
aexl
11

Odpowiedzi tutaj są niepełne, jak w większości innych. Po zebraniu informacji z kilku miejsc, zadziałało dla mnie (1) upewnienie się, że pożądane ustawienia narodowe są dostępne (wygenerowanie, jeśli nie były), a następnie (2) ustawienie zmiennych środowiskowych powiązanych z ustawieniami narodowymi na pożądane ustawienia regionalne.

W moim przypadku potrzebowałem en_US.UTF-8programowo (tj. Nieinteraktywnie) zainstalowany w kontenerze dokera. Ff osiągnął to, czego potrzebuję, ale powinien działać dobrze w interaktywnej powłoce.

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

W tej samej powłoce musisz zrobić, source ~/.bashrcaby zmienne env zaczęły działać natychmiast. Można sprawdzić, czy ustawienia regionalne zostały poprawnie skonfigurowane, wywołując 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

Było wiele pytań i pytań dotyczących tego tematu, ale tylko kilka było w rzeczywistości pomocnych. Kredyt, na który przysługuje kredyt:

Car
źródło
6

Żadna z tych odpowiedzi nie działała dla mnie na kontenerze LXC zainstalowanym z:

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

Zawsze otrzymywałem następujące dane wyjściowe locale-gen, tj. Nie generowałem żadnych ustawień narodowych (nie ma na liście):

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

Uruchomienie dpkg-reconfigure localesi wybranie niektórych ustawień narodowych nie zaktualizowało się /etc/locale.gentak, jak się spodziewałem.

Jednak gdy ręcznie zmodyfikowałem ten plik i odkomentowałem wybrane ustawienia narodowe, a następnie locale-genzacząłem działać poprawnie:

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

Mogłem również ręcznie wygenerować ustawienia regionalne, takie jak to:

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

Ale to nie było trwałe rozwiązanie: odkryłem, że uruchomienie locale-genbez --keep-existingopcji spowoduje usunięcie wszystkich takich ręcznie wygenerowanych ustawień narodowych, tj. Wszystkich ustawień narodowych niewymienionych (i niekomentowanych) w /etc/locale.gen.

qris
źródło
3

W przypadku aplikacji internetowej lepszym rozwiązaniem może być użycie setlocale () wewnątrz programu, niż wymaganie, aby domyślne ustawienia narodowe systemu były odpowiednio ustawione na zewnątrz. W ten sposób mniej luźne końce.

SamB
źródło
1
Jeśli system nie wymaga ustawień regionalnych, setlocaleto nie będzie działać.
Ojciec chrzestny
1

Ale najpierw musisz mieć zainstalowany pakiet językowy. Na moim niemieckim VPS nie było wcześniej zainstalowanego pakietu języka angielskiego. Najpierw sprawdź, czy masz zainstalowany:

aptitude install language-pack-en
Valentt
źródło
1

Dla tych, którzy, jak ja, na Ubuntu 14.04 LTS, nie mają żadnego /etc/locale.genpliku, możesz dodać nowe ustawienia narodowe, /var/lib/locales/supported.d/locala następnie uruchomić:

sudo dpkg-reconfigure locales

Możesz także dodać ustawienia regionalne dla języka francuskiego (na przykład) w ten sposób (zamiast edycji /var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

dodawać i generować ISO-8859-1i UTF-8zestawów znaków z fr_FRlokalizacji i ostatecznie wpisz:

sudo dpkg-reconfigure locales

aby zakończyć pracę

SebMa
źródło