[Ta odpowiedź jest skierowana tylko na platformę Linux]
Pierwszą rzeczą, którą powinieneś wiedzieć, jest to, że większość ścieżek zlokalizowanych w pliku konfiguracyjnym ustawień regionalnych można uzyskać z localedef --help
:
$ localedef --help | tail -n 5
System's directory for character maps : /usr/share/i18n/charmaps
repertoire maps: /usr/share/i18n/repertoiremaps
locale path : /usr/lib/locale:/usr/share/i18n
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>
Widzisz ostatni /usr/share/i18n
? Tutaj znajduje się plik konfiguracyjny xx_XX.UTF-8:
$ ls /usr/share/i18n/locales/zh_*
/usr/share/i18n/locales/zh_CN /usr/share/i18n/locales/zh_HK /usr/share/i18n/locales/zh_SG /usr/share/i18n/locales/zh_TW
Co teraz ? Musimy je skompilować do archiwum binarnego. Jednym ze sposobów, np. Zakładając, że mam /usr/share/i18n/locales/en_LOVE
, mogę dodać go do listy kompilacji, tzn. Do /etc/locale-gen
pliku:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
I skompiluj go do pliku binarnego za pomocą sudo locale-gen
:
$ sudo locale-gen
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
...
en_LOVE.UTF-8... done
Generation complete.
A teraz zaktualizować domyślne ustawienia regionalne systemu z pożądane LANG
, LC_ALL
... etc z tego update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
w rzeczywistości oznacza również aktualizację tego /etc/default/locale
pliku, który będzie pobierany przez system podczas logowania, aby skonfigurować zmienne środowiskowe:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Ale możemy nie chcieć restartować, aby zadziałać, więc możemy po prostu pobrać go do zmiennej środowiskowej w bieżącej sesji powłoki:
$ . /etc/default/locale
Jak o sudo dpkg-reconfigure locales
? Jeśli się wokół niego obejrzysz, będziesz wiedział, że to polecenie działa w zasadzie jako GUI, aby uprościć powyższe kroki, tj. Edycja /etc/locale.gen
->sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Dla Pythona, o ile /etc/locale.gen
zawiera on tego kandydata locale i locale.gen
zostanie skompilowany, setlocale(category, locale)
powinien działać bez rzucania locale.Error: unsupoorted locale setting
. Możesz sprawdzić poprawny ciąg en_US.UTF-8
/ en_US/....etc
do ustawienia setlocale()
, obserwując /etc/locale.gen
plik, a następnie cofnąć komentarz i skompilować go zgodnie z potrzebami. zh_CN GB2312
bez kropki w tym pliku oznacza, że poprawny ciąg to zh_CN
i zh_CN.GB2312
.