python locale ubuntu-11.04

Error de configuración regional de Python: configuración de configuración regional no compatible



locale ubuntu-11.04 (14)

¿Por qué recibo el siguiente error al hacer esto en Python:

>>> import locale >>> print str( locale.getlocale() ) (None, None) >>> locale.setlocale(locale.LC_ALL, ''de_DE'') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/locale.py", line 531, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting

Esto funciona con otras localizaciones como fr o nl también. Estoy usando Ubuntu 11.04.

Actualización: Hacer lo siguiente no produjo nada:

dpkg-reconfigure locales perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory


Al intentar que Python escupiera nombres en una ubicación específica , aterricé aquí con el mismo problema.

En la búsqueda de la respuesta, las cosas se pusieron un poco místicas, me parece

Encontré ese código python.

import locale print locale.getdefaultlocale() >> (''en_DK'', ''UTF-8'')

Y de hecho, locale.setlocale(locale.LC_TIME, ''en_DK.UTF-8'') funciona

Usando consejos aquí, probé más para ver qué hay disponible usando el código Python

import locale loc_list = [(a,b) for a,b in locale.locale_alias.items() ] loc_size = len(loc_list) print loc_size,''entries'' for loc in loc_list: try: locale.setlocale(locale.LC_TIME, loc[1]) print ''SUCCES set {:12} ({})''.format(loc[1],loc[0]) except: pass

cuyos rendimientos

858 entries SUCCES set en_US.UTF-8 (univ) SUCCES set C (c.ascii) SUCCES set C (c.en) SUCCES set C (posix-utf2) SUCCES set C (c) SUCCES set C (c_c) SUCCES set C (c_c.c) SUCCES set en_IE.UTF-8 (en_ie.utf8@euro) SUCCES set en_US.UTF-8 (universal.utf8@ucs4) SUCCES set C (posix) SUCCES set C (english_united-states.437) SUCCES set en_US.UTF-8 (universal)

De lo que solo arriba está funcionando! Pero el en_DK.UTF-8 no está en esta lista, aunque funciona!?!? ¿¿Qué?? Y la lista de configuración regional generada por python contiene una gran cantidad de combos de da y DK, que estoy buscando, pero nuevamente no hay UTF-8 para da / DK ...

Estoy en una distribución Point Linux (basada en Debian), y aquí la locale dice entre otras LC_TIME="en_DK.UTF-8" , que sé que funciona, pero no la configuración regional que necesito.

locale -a dice

C C.UTF-8 en_DK.utf8 en_US.utf8 POSIX

Definitivamente, necesito instalar otra configuración regional , lo que hice editando /etc/locale.gen , descomentar la línea necesaria da_DK.UTF-8 UTF-8 y ejecutar el comando locale-gen

Ahora locale.setlocale(locale.LC_TIME, ''da_DK.UTF-8'') también funciona, y puedo obtener mis nombres de días y meses localizados.

Mi conclusión:

Python: locale.locale_alias no es nada útil para encontrar locales disponibles.

Linux: Es bastante fácil obtener la lista de configuraciones regionales e instalar una nueva configuración regional. Mucha ayuda disponible.

Windows: He estado investigando un poco, pero nada concluyente. Sin embargo, hay publicaciones que conducen a las respuestas, pero no sentí la necesidad de seguirlas.


Colóquelo en el Dockerfile sobre el ENV .

# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* / && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 ENV LANG en_US.UTF-8


Ejecutar los siguientes comandos

export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" sudo dpkg-reconfigure locales

Se solucionará esto.


En Arch Linux pude arreglar esto ejecutando sudo locale-gen


En mi opinión, la forma más fácil de configurar el entorno local en python {, 3} es:

>>> import locale >>> locale.setlocale(locale.LC_ALL, '''') ''de_DE.UTF-8''

Entonces, la configuración local simplemente funciona, si estás en una distribución de linux decente, y también debería funcionar en distribuciones binarias de los otros sistemas operativos (o eso es un error, en mi opinión).

>>> import datetime as dt >>> print(dt.date.today().strftime("%A %d. %B %Y")) Sonntag 11. Dezember 2016


Este error puede ocurrir, si acaba de agregar una nueva configuración regional. Es necesario reiniciar el shell interactivo de python ( quit( ) y python ) para obtener acceso a él.


Para el registro, tuve el mismo problema, pero ninguna de las soluciones funcionó. Actualicé mi computadora y migré mi PC. Tuve un local mixto de inglés y español:

$ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC=es_ES.utf8 LC_TIME=es_ES.utf8 LC_COLLATE="en_US.utf8" LC_MONETARY=es_ES.utf8 LC_MESSAGES="en_US.utf8" LC_PAPER=es_ES.utf8 LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT=es_ES.utf8 LC_IDENTIFICATION="en_US.utf8" LC_ALL=

Pero, en mi nueva instalación de Debian, simplemente seleccioné el inglés como locale. Lo que finalmente funcionó fue reconfigurar el paquete de locales para agregar y generar español también.

$ grep -v "#" /etc/locale.gen en_US.UTF-8 UTF-8 es_ES.UTF-8 UTF-8


Probablemente no tenga ninguna configuración regional de_DE disponible.

Puede ver una lista de entornos locales disponibles con el comando locale -a . Por ejemplo, en mi máquina:

$ locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 it_CH.utf8 it_IT.utf8 POSIX

Tenga en cuenta que si desea establecer la configuración regional en it_IT , también debe especificar el .utf8 :

>>> import locale >>> locale.setlocale(locale.LC_ALL, ''it_IT'') # error! Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/locale.py", line 539, in setlocale return _setlocale(category, locale) locale.Error: unsupported locale setting >>> locale.setlocale(locale.LC_ALL, ''it_IT.utf8'') ''it_IT.utf8''

Para instalar un nuevo locale use:

sudo apt-get install language-pack-id

donde id es el código de idioma (tomado de here )

Una vez que haya instalado la configuración regional, debe seguir los consejos de Julien Palard y reconfigurar las configuraciones regionales con:

sudo dpkg-reconfigure locales


Según este enlace , se resuelve ingresando este comando:

exportar LC_ALL = C


Si estás en un Debian (o en una bifurcación de Debian), puedes agregar locales usando:

dpkg-reconfigure locales


Si yo fuera tú, usaría BABEL: http://babel.pocoo.org/en/latest/index.html

Tuve el mismo problema aquí usando Docker, probé cada paso y no funcioné bien, siempre tuve un error de configuración regional, así que decidí usar BABEL y todo funcionó bien.


Una de las respuestas anteriores proporciona la solución:

export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" sudo dpkg-reconfigure locales

El problema con la solución anterior es que tiene que hacerse en el shell de Linux. Sin embargo, si está proporcionando su código para trabajar en la máquina cliente, este es un mal enfoque. También intenté ejecutar los comandos anteriores usando os.system (), pero aún así no funciona.

La solución que funcionó para mí es

locale.setlocale(locale.LC_ALL,''en_US.UTF-8'')


Una solución más permanente sería llenar los valores faltantes, en la salida que se muestra con el comando: locale

La salida del locale es:

$ locale LANG=en_US.utf8 LANGUAGE= LC_CTYPE="en_US.utf8" LC_NUMERIC=es_ES.utf8 LC_TIME=es_ES.utf8 LC_COLLATE="en_US.utf8" LC_MONETARY=es_ES.utf8 LC_MESSAGES="en_US.utf8" LC_PAPER=es_ES.utf8 LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT=es_ES.utf8 LC_IDENTIFICATION="en_US.utf8" LC_ALL=

Para completar los valores que faltan edite ~ / .bashrc:

$ vim ~/.bashrc

Agregue las siguientes líneas después del comando anterior (suponga que desea que en_US.UTF-8 sea su idioma):

export LANGUAGE="en_US.UTF-8" export LC_ALL="en_US.UTF-8"

Si este archivo es de solo lectura, necesitaría seguir los pasos mencionados por The GeekyBoy . La respuesta dada por el Dr. Beco en Superusuario tiene detalles relacionados con el almacenamiento de archivos de solo lectura.

Después de guardar el archivo haz:

$ source ~/.bashrc

Ahora ya no estarás enfrentando el mismo problema.


  • ejecute este comando locale para obtener qué locale se usa. Como:

LANG = en_US.UTF-8
IDIOMA = en_US: en
LC_CTYPE = zh_CN.UTF-8
LC_NUMERIC = "en_US.UTF-8"
LC_TIME = "en_US.UTF-8"
LC_COLLATE = "en_US.UTF-8"
LC_MONETARY = "en_US.UTF-8"
LC_MESSAGES = "en_US.UTF-8"
LC_PAPER = "en_US.UTF-8"
LC_NAME = "en_US.UTF-8"
LC_ADDRESS = "en_US.UTF-8"
LC_TELEPHONE = "en_US.UTF-8"
LC_MEASUREMENT = "en_US.UTF-8"
LC_IDENTIFICATION = "en_US.UTF-8"
LC_ALL =

  • busque la lista de entornos locales en el primer paso en el /etc/locale-gen . Uncomment a los usados
  • ejecute locale-gen para generar locales recién agregados