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