Establecer la configuración regional de Python no funciona

Así que he estado tratando de establecer la configuración regional de Python. Quiero hacerlo porque quiero usar el nombre del día de la semana en el idioma local (usando strftime('%A') ). Pero actualmente el día de la semana se imprime en inglés, aunque intenté establecer la configuración regional de varias maneras. Estoy ejecutando esto en un RPi2 con Ubuntu Mate.

He probado las soluciones en este tema ¿Cuál es la forma correcta de establecer la configuración regional de Python en Windows?

He intentado establecer explícitamente la configuración regional para nl_NL.utf8 :

 $> locale -a $> python3 >>> import locale >>> locale.setlocale(locale.LC_ALL,'nl_NL.utf-8') 

También intenté establecer una cadena vacía, una sugerencia en la última respuesta:

 >>> locale.setlocale(locale.LC_ALL, '') 

En ambos casos cuando lo bash.

 >>> locale.getlocale() 

Veo nl_NL.utf8

¡Pero todavía tengo el día de la semana en inglés! No he podido encontrar mucho sobre esto en internet, excepto por el tema anterior y no pude arreglarlo.


Editar:

He probado las 3 opciones. El primero devuelve un resultado extraño:

 ~/Documenten$ python3 Python 3.4.3+ (default, Oct 14 2015, 16:03:50) [GCC 5.2.1 20151010] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import locale >>> locale.getlocale(locale.LC_TIME) (None, None) >>> locale.setlocale(locale.LC_TIME, 'nl_NL.utf-8') 'nl_NL.utf-8' >>> locale.getlocale(locale.LC_TIME) ('nl_NL', 'UTF-8') >>> exit() jeffrey@jeffrey-desktop:~/Documenten$ python3 Python 3.4.3+ (default, Oct 14 2015, 16:03:50) [GCC 5.2.1 20151010] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import locale >>> locale.getlocale(locale.LC_TIME) (None, None) 

Parece que nada se guarda. ¿Me equivoco al suponer que establece su configuración regional una vez y luego el sistema recordará esto? La segunda opción:

 ~/Documenten$ python3 Python 3.4.3+ (default, Oct 14 2015, 16:03:50) [GCC 5.2.1 20151010] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import calendar >>> calendar.day_name[2] 'Wednesday' >>> import locale >>> locale.nl_langinfo(locale.DAY_2) 'Monday' 

A pesar de que estoy tratando de obtener un nombre holandés de día de la semana, a cambio recibo un nombre en inglés. Además, este método comienza a contar desde el domingo y no el lunes. ¿Estoy haciendo algo mal? La tercera sugerencia me dio el nombre de mi día de la semana, gracias! Pero todavía me pregunto por qué el primero no funciona? Estoy usando este script en mi propio dispositivo y me gustaría trabajar con la configuración regional correcta.


Edit2:

sí, llamar a locale.setlocale () en Python no afecta los futuros procesos de Python. Configure las variables de entorno en su lugar, vea Cómo establecer todas las configuraciones regionales en Ubuntu.

¡De acuerdo! Por eso no funcionó. Supuse que había establecido la configuración regional para cualquier uso futuro en Python, como una variable de entorno, pero solo para Python.

Tengo un script de bash que crea archivos y este script de Python debería eliminarlo después de un tiempo (aprendiendo a codificar, no conocía Python cuando escribí el script de Bash). El método de “fecha” de Bash parece recoger el local de una manera u otra. Seguiré adelante y veré qué puedo arreglar para Python. Esto es lo que veo cuando $ locale :

 LANG=nl_NL.UTF-8 LANGUAGE=nl:en LC_CTYPE="nl_NL.UTF-8" LC_NUMERIC="nl_NL.UTF-8" LC_TIME="nl_NL.UTF-8" LC_COLLATE="nl_NL.UTF-8" LC_MONETARY="nl_NL.UTF-8" LC_MESSAGES="nl_NL.UTF-8" LC_PAPER="nl_NL.UTF-8" LC_NAME="nl_NL.UTF-8" LC_ADDRESS="nl_NL.UTF-8" LC_TELEPHONE="nl_NL.UTF-8" LC_MEASUREMENT="nl_NL.UTF-8" LC_IDENTIFICATION="nl_NL.UTF-8" LC_ALL= 

Parece que nada se guarda. ¿Me equivoco al suponer que establece su configuración regional una vez y luego el sistema recordará esto?

sí, llamar a locale.setlocale() en Python no afecta los futuros procesos de python . Configure las variables de entorno en su lugar, vea Cómo establecer todas las configuraciones regionales en Ubuntu .

El método de “fecha” de Bash parece recoger el local de una manera u otra.

date llama a setlocale(LC_ALL, "") al inicio, es decir, debe llamar a setlocale() al menos una vez por proceso para habilitar la configuración regional $LANG lugar de la configuración regional C


setlocale(LC_ALL, '') establece la configuración regional según la variable $LANG primero, no $LANGUAGE (está relacionada pero es diferente: “La ruta de búsqueda gettext de GNU contiene ‘LC_ALL’, ‘LC_CTYPE’, ‘LANG’ y ‘LANGUAGE’, en que orden. “ ).

Es suficiente establecer la categoría LC_TIME (en Ubuntu):

 >>> import locale >>> import time >>> time.strftime('%A') 'Tuesday' >>> locale.getlocale(locale.LC_TIME) ('en_US', 'UTF-8') >>> locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8') 'ru_RU.UTF-8' >>> time.strftime('%A') 'Вторник' >>> locale.getlocale(locale.LC_TIME) ('ru_RU', 'UTF-8') 

Si setlocale() no ha generado la locale.Error: unsupported locale setting la categoría de configuración regional correspondiente se establece correctamente.

También puede obtener el nombre del día de la semana sabiendo su posición (en la misma sesión de python donde se cambia la configuración regional):

 >>> import calendar >>> calendar.day_name[1] 'Вторник' >>> locale.nl_langinfo(locale.DAY_3) 'Вторник' 

Una forma portátil, para imprimir un día de la semana en una configuración regional determinada sin modificar un estado global, es usar el módulo babel :

 >>> from datetime import date >>> from babel.dates import format_date # $ pip install babel >>> format_date(date.today(), format='EEEE', locale='en') 'Tuesday' >>> format_date(date.today(), format='EEEE', locale='ru') 'вторник' >>> format_date(date.today(), format='EEEE', locale='nl') 'dinsdag'