Wygenerowałem pliki lokalizacyjne en_US.utf8 , et_EE.iso88591 i ru_RU.utf8 . Teraz, jeśli spróbuję zmienić dowolną zmienną ustawień regionalnych na ru_RU.utf8 lub en_US.utf8 , nie będzie to miało żadnego wpływu:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
Jeśli jednak zmienię zmienną LANG = , wówczas wszystkie inne zmienne oprócz LANGUAGE = i LC_ALL = przyjmują wartość zmiennej LANG = . Czy istnieje sposób na zmodyfikowanie każdej zmiennej ustawień narodowych osobno? Ponadto, czy mam rację, że zmienne regionalne nie są zwykłymi zmiennymi powłoki, ale bardziej przypominają parametry użyteczne w locale ?
źródło
LANG
iLC_xxx
czy zmienne środowiskowe? moich testów wynika, że tylkoLANG
iLANGUAGE
iLC_MESSAGES
iLC_ALL
są zmienne środowiskowe, podczas gdy inne zmienne, jakLC_CTYPE
iLC_MONETARY
nie są zmienne środowiskowe (również nie są one zmienne powłoki)?env LC_TIME=en_GB date
zenv LC_TIME=fr_FR date
ienv PATH="$PATH" date
(oczywiście, wybrać lokalizacje, które istnieją w systemie). Oczywiście, każda zmienna może, ale nie musi być ustawiona w środowisku danego procesu. Jakie testy wykonałeś? Czy na pewno używana aplikacja zachowuje się inaczej w zależności odLC_CTYPE
(dość powszechnego) iLC_MONETARY
(dość rzadkiego)?printenv
polecenie, aby wyświetlić zmienne środowiskowe bash, i tylkoLANG
iLANGUAGE
iLC_MESSAGES
iLC_ALL
zostały wymienione jako zmienne środowiskowe. Ja również wykonywane poleceniaset -o posix
następuje przez polecenieset
, aby uzyskać zmienne środowiskowe oraz zmienne powłoki bash, a tylkoLANG
iLANGUAGE
iLC_MESSAGES
iLC_ALL
zostały wymienione. Więc oznacza to, żeLANG
iLANGUAGE
iLC_MESSAGES
iLC_ALL
są zmienne środowiskowe i reszta zmiennych locale nie są, a także nie są zmienne powłoki.LANG
,LANGUAGE
,LC_MESSAGES
iLC_ALL
. (Albo zrobiłeś to jawnie, albo twoja dystrybucja, albo administrator systemu zrobił to za ciebie.) Możesz ustawić zmienną środowiskową pod dowolną (poprawną składniowo) nazwą! Ale niektóre nazwy mają znaczenie dla niektórych aplikacji, a niektóre nie.LC_MESSAGES
,LC_CTYPE
,LC_TIME
I tak dalej są używane przez aplikacje, które dbają o język komunikatów o błędach, kodowania znaków, format czasu, i tak dalej.LC_ALL
zastępuje wszystkie pozostałe ustawienia, więc wartość innych zmiennych regionalnych nie ma znaczenia. Zwykle jest używany tylko tymczasowo, aby zmusić program do korzystania z danych ustawień regionalnych, nie ma sensu mieć go w normalnym środowisku.W ramach dystrybucji opartych na Fedorze / CentOS / RHEL uważam, że możesz zmienić ustawienia regionalne na jeden z ustawień regionalnych wyświetlanych po uruchomieniu
locale -a
polecenia w tym pliku systemowym:Na przykład w moim systemie Fedora 14:
W GNOME możesz uruchomić aplikację pomocy:
Które wyświetla ten GUI:
Myślę, że jest nieco inaczej w przypadku dystrybucji Debian / Ubuntu. Myślę, że to ten plik:
Uważam, że są to zmienne środowiskowe, ale nie do końca pewne, w jaki sposób aplikacje z nich korzystają, jeśli w ogóle.
Bibliografia
źródło
Przynajmniej na RedHat 6, zauważ, że jeśli ustawione jest LC_ALL, to ustawienie innych zmiennych środowiskowych LC_ * nie przyniesie żadnego efektu, ponieważ LC_ALL ma pierwszeństwo przed wszystkimi innymi zmiennymi środowiskowymi LC_ *.
źródło
W systemach Debian można uruchomić,
dpkg-reconfigure locales
aby ustawić główny język i udostępnić inne; następnie można uruchomić,update-locale
aby ustawićLANGUAGE
zmienną środowiskową w tak,/etc/default/locale
aby miała języki zastępcze.źródło
dpkg-reconfigure locales
, nielocale