[此答案仅适用于linux平台]
您应该知道的第一件事是,大多数语言环境配置文件的定位路径都可以从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>
看到最后一个/usr/share/i18n
?这是您的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
怎么办 ?我们需要将它们编译为存档二进制文件。一种方式,例如假设我有/usr/share/i18n/locales/en_LOVE
,我可以将其添加到编译列表(即/etc/locale-gen
文件)中:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
并将其编译为二进制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.
且以期望现在更新系统默认的语言环境LANG
,LC_ALL
...等与此update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
实际上还意味着更新此/etc/default/locale
文件,该文件将在登录时由系统提供以设置环境变量:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
但是我们可能不想重启才能生效,因此我们可以将其来源到当前shell会话中的环境变量:
$ . /etc/default/locale
怎么sudo dpkg-reconfigure locales
样 如果您玩转它,您将知道此命令基本上充当GUI来简化上述步骤,即Edit /etc/locale.gen
-> sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
对于python,只要/etc/locale.gen
包含该语言环境候选者并locale.gen
进行编译,就setlocale(category, locale)
可以正常运行locale.Error: unsupoorted locale setting
。您可以通过观察文件来检查要在中设置的正确字符串en_US.UTF-8
/ ,然后取消注释并根据需要对其进行编译。该文件中不带点的表示正确的字符串是和。en_US/....etc
setlocale()
/etc/locale.gen
zh_CN GB2312
zh_CN
zh_CN.GB2312