[Esta resposta é direcionada apenas na plataforma Linux]
A primeira coisa que você deve saber é que a maior parte do caminho localizado no arquivo de configuração de localidade pode ser obtida em 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>
Veja o último /usr/share/i18n
? É aqui que o seu arquivo de configuração xx_XX.UTF-8 está localizado:
$ 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
O que agora ? Precisamos compilá-los no arquivo binário. Por um lado, por exemplo, suponha que eu tenha /usr/share/i18n/locales/en_LOVE
, posso adicioná-lo à lista de compilação, ou seja, /etc/locale-gen
arquivo:
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
E compile-o para o binário com 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.
E agora atualize o código do idioma padrão do sistema com o desejado LANG
, LC_ALL
etc., com este update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
na verdade, também significa atualizar esse /etc/default/locale
arquivo, que será originado pelo sistema no login para configurar variáveis de ambiente:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Mas podemos não querer reiniciar para entrar em vigor, portanto, podemos apenas fornecê-lo para a variável de ambiente na atual sessão do shell:
$ . /etc/default/locale
Que tal sudo dpkg-reconfigure locales
? Se você brincar com isso, você saberá que este comando age basicamente como GUI para simplificar as etapas acima, ou seja, Editar /etc/locale.gen
->sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Para python, contanto que /etc/locale.gen
esse candidato locale e locale.gen
seja compilado, setlocale(category, locale)
deve funcionar sem lançamentos locale.Error: unsupoorted locale setting
. Você pode verificar a sequência correta en_US.UTF-8
/ en_US/....etc
a ser configurada setlocale()
, observando o /etc/locale.gen
arquivo e, em seguida, remova o comentário e compile-a conforme desejado. zh_CN GB2312
sem ponto nesse arquivo significa que a string correta é zh_CN
e zh_CN.GB2312
.