[Jawaban ini hanya untuk platform linux]
Hal pertama yang harus Anda ketahui adalah sebagian besar lokasi path file config terletak dapat diperoleh dari 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>
Lihat yang terakhir /usr/share/i18n
? Di sinilah file konfigurasi xx_XX.UTF-8 Anda berada:
$ 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
Sekarang apa ? Kita perlu mengkompilasinya ke dalam arsip biner. Salah satu caranya, misalkan anggap saya punya /usr/share/i18n/locales/en_LOVE
, saya bisa menambahkannya ke daftar kompilasi, yaitu /etc/locale-gen
file:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
Dan kompilasi ke biner dengan 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.
Dan sekarang perbarui lokal sistem default dengan yang diinginkan LANG
, LC_ALL
... dll dengan ini update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
sebenarnya juga berarti memperbarui /etc/default/locale
file ini yang akan sumber oleh sistem saat login ke pengaturan variabel lingkungan:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Tetapi kita mungkin tidak ingin mem-boot ulang agar berfungsi, jadi kita bisa sumberkan saja ke variabel lingkungan di sesi shell saat ini:
$ . /etc/default/locale
Bagaimana dengan sudo dpkg-reconfigure locales
? Jika Anda memutarnya, Anda akan tahu perintah ini pada dasarnya bertindak sebagai GUI untuk menyederhanakan langkah-langkah di atas, yaitu Edit /etc/locale.gen
-> sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Untuk python, selama /etc/locale.gen
mengandung kandidat lokal itu dan locale.gen
dikompilasi, setlocale(category, locale)
harus bekerja tanpa lemparan locale.Error: unsupoorted locale setting
. Anda dapat memeriksa string yang benar en_US.UTF-8
/ yang en_US/....etc
akan ditetapkan setlocale()
, dengan mengamati /etc/locale.gen
file, dan kemudian menghapus komentar dan mengkompilasinya sesuai keinginan. zh_CN GB2312
tanpa titik dalam file itu berarti string yang benar adalah zh_CN
dan zh_CN.GB2312
.