[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-gentệ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-localethực ra cũng có nghĩa là cập nhật /etc/default/localetệ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.gencó 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/....etcsẽ được đặt setlocale(), bằng cách quan sát /etc/locale.gentệp, sau đó bỏ ghi chú và biên dịch nó theo ý muốn. zh_CN GB2312không có dấu chấm trong tệp đó có nghĩa là chuỗi đúng zh_CNvà zh_CN.GB2312.