[Esta respuesta es objetivo solo en la plataforma Linux]
Lo primero que debe saber es que la mayor parte de la ruta localizada del archivo de configuración local se puede obtener de 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>
¿Ves el último /usr/share/i18n
? Aquí es donde se encuentra el archivo de configuración 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
Ahora que ? Necesitamos compilarlos en archivo binario. Una de las formas, por ejemplo, supongo que sí /usr/share/i18n/locales/en_LOVE
, puedo agregarlo a la lista de compilación, es decir, /etc/locale-gen
archivo
$ tail -1 /etc/locale.gen
en_LOVE.UTF-8 UTF-8
Y compilarlo en binario con 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.
Y ahora actualice la configuración regional predeterminada del sistema con la deseada LANG
, LC_ALL
... etc con esto update-locale
:
sudo update-locale LANG=en_LOVE.UTF-8
update-locale
en realidad también significa actualizar este /etc/default/locale
archivo que se generará por sistema al iniciar sesión para configurar las variables de entorno:
$ head /etc/default/locale
# File generated by update-locale
LANG=en_LOVE.UTF-8
LC_NUMERIC="en_US.UTF-8"
...
Pero es posible que no queramos reiniciar para que surta efecto, por lo que podemos obtenerlo en la variable de entorno en la sesión de shell actual:
$ . /etc/default/locale
¿Qué tal sudo dpkg-reconfigure locales
? Si juegas, sabrás que este comando básicamente actúa como GUI para simplificar los pasos anteriores, es decir, Editar /etc/locale.gen
-> sudo locale-gen
->sudo update-locale LANG=en_LOVE.UTF-8
Para python, siempre que /etc/locale.gen
contenga ese candidato de configuración regional y locale.gen
se compile, setlocale(category, locale)
debería funcionar sin lanzamientos locale.Error: unsupoorted locale setting
. Puede verificar la cadena correcta en_US.UTF-8
/ en_US/....etc
que se establecerá setlocale()
, observando el /etc/locale.gen
archivo, y luego descomentarlo y compilarlo como desee. zh_CN GB2312
sin punto en ese archivo significa que la cadena correcta es zh_CN
y zh_CN.GB2312
.