Estoy intentando ordenar una lista de cadenas de una manera consciente de la configuración regional. He usado la biblioteca de Babel para otras tareas relacionadas con i18n, pero no admite la clasificación. El locale
módulo de Python proporciona una strcoll
función, pero requiere que la configuración regional del proceso se establezca con la que quiero trabajar. Es una especie de dolor, pero puedo vivir con eso.
El problema es que parece que no puedo establecer la configuración regional. La documentación del locale
módulo da este ejemplo:
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
Cuando ejecuto eso, obtengo esto:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting
¿Qué estoy haciendo mal?
Ubuntu 13.04
,Linux 3.8.0-19
con python2.7.4
al intentar establecer la configuración regional enfr_FR
. Configurarlofr_FR.UTF-8
funcionó para mí.'eng_usa'
('en_US'
no funcionó)Esta es la única forma correcta de usarlo, proporcionando un ejemplo para la configuración regional alemana:
import locale locale.setlocale(category=locale.LC_ALL, locale="German" # Note: do not use "de_DE" as it doesn't work)
fuente
German
aPortuguese_Brazil.1252
. ¿Conoce una documentación que enumere estos valores?No debe pasar una configuración regional explícita a setlocale, está mal. Deja que se entere del medio ambiente. Tienes que pasarle una cadena vacía
import locale locale.setlocale(locale.LC_ALL, '')
fuente
Ubuntu
En Ubuntu, puede tener este problema porque no tiene ese local instalado en su sistema.
Desde shell intente un:
y compruebe si encuentra la configuración regional que le interesa. De lo contrario, debe instalarla:
donde XXX es su idioma (en mi caso "xxx = it", configuración regional italiana) Luego ejecute un
dpkg-reconfigure
:Después de eso, intente nuevamente en su shell de python:
>>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(esto es para la configuración regional italiana, que era lo que necesitaba)
fuente
Sé que esto se preguntó hace años, pero pensé en intentar agregar lo que descubrí, usando Python 3.6 en Windows:
import locale for x in locale.windows_locale.values(): print(x.replace('_','-'))
Probé algunos y eso también parece ser una forma de averiguar qué está disponible en Windows.
Es bueno saberlo: esto, por alguna razón, no es compatible con strptime () en la versión estable actual de Python
Y luego simplemente configura la configuración regional:
locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)
fuente
De los documentos locale.setlocale:
locale.setlocale(category, locale=None): """ Set the locale for the given category. The locale can be a string, an iterable of two strings (language code and encoding), or None. """"
Bajo Linux (especialmente Ubuntu) puede usar
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
o
locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
Obtendrá el mismo error si la configuración regional no está instalada en el sistema. Por lo tanto, asegúrese de tener la configuración regional instalada en su sistema:
$ locale -a # to list the currently installed locales $ (sudo) locale-gen de_DE.UTF-8 # to install new locale
fuente