[Câu trả lời này chỉ nhắm mục tiêu trên nền tảng linux]
Điều đầu tiên bạn nên biết là hầu hết các tệp cấu hình cục bộ có thể lấy từ 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>
Xem lần cuối /usr/share/i18n
? Đây là nơi chứa tệp cấu hình xx_XX.UTF-8 của bạn:
$ 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
Giờ thì sao ? Chúng ta cần biên dịch chúng thành lưu trữ nhị phân. Một trong những cách, ví dụ như giả sử tôi có /usr/share/i18n/locales/en_LOVE
, tôi có thể thêm nó vào danh sách biên dịch, tức là /etc/locale-gen
tệp:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
Và biên dịch nó thành nhị phân với 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.
Và bây giờ hãy cập nhật ngôn ngữ mặc định của hệ thống với mong muốn LANG
, LC_ALL
... vv với điều này update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
thực ra cũng có nghĩa là cập nhật /etc/default/locale
tệp này , nguồn sẽ được hệ thống đăng nhập để thiết lập các biến môi trường:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Nhưng chúng tôi có thể không muốn khởi động lại để có hiệu lực, vì vậy chúng tôi chỉ có thể nguồn nó cho biến môi trường trong phiên shell hiện tại:
$ . /etc/default/locale
Thế còn sudo dpkg-reconfigure locales
? Nếu bạn chơi xung quanh nó, bạn sẽ biết lệnh này về cơ bản hoạt động như GUI để đơn giản hóa các bước trên, tức là Chỉnh sửa /etc/locale.gen
-> sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Đối với python, miễn là /etc/locale.gen
có chứa ứng cử viên địa phương đó và locale.gen
được biên dịch, setlocale(category, locale)
nên hoạt động mà không cần ném locale.Error: unsupoorted locale setting
. Bạn có thể kiểm tra đúng chuỗi en_US.UTF-8
/ en_US/....etc
sẽ được đặt setlocale()
, bằng cách quan sát /etc/locale.gen
tệp, sau đó bỏ ghi chú và biên dịch nó theo ý muốn. zh_CN GB2312
không có dấu chấm trong tệp đó có nghĩa là chuỗi đúng zh_CN
và zh_CN.GB2312
.