He generado archivos de localización en_US.utf8 , et_EE.iso88591 y ru_RU.utf8 . Ahora, si trato de cambiar cualquiera de las variables locales a ru_RU.utf8 o en_US.utf8 , entonces esto no tiene ningún efecto:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
Sin embargo, si cambio la variable LANG = , todas las demás variables, excepto LANGUAGE = y LC_ALL = toman el valor de la variable LANG = . ¿Hay alguna manera de modificar cada variable de configuración regional por separado? Además, ¿estoy en lo cierto de que las variables de configuración regional no son variables de shell normales, sino más bien parámetros para la utilidad de configuración regional ?
fuente
LANG
yLC_xxx
son variables de entorno? mis pruebas muestran que soloLANG
yLANGUAGE
yLC_MESSAGES
yLC_ALL
son variables de entorno, mientras que otras variables comoLC_CTYPE
yLC_MONETARY
no son variables de entorno (además, no son variables de shell)env LC_TIME=en_GB date
conenv LC_TIME=fr_FR date
yenv PATH="$PATH" date
(obviamente, elija las configuraciones regionales que existen en su sistema). Obviamente, cada variable puede o no establecerse en el entorno de un proceso dado. ¿Qué pruebas hiciste? ¿Estás seguro de que la aplicación que usaste se comporta de manera diferente segúnLC_CTYPE
(bastante común) yLC_MONETARY
(bastante raro)?printenv
comando para enumerar las variables de entorno de bash, y soloLANG
yLANGUAGE
yLC_MESSAGES
yLC_ALL
se enumeraron como variables de entorno. También ejecuté el comandoset -o posix
seguido del comandoset
para obtener las variables de entorno y las variables de shell de bash, y soloLANG
yLANGUAGE
yLC_MESSAGES
yLC_ALL
se enumeraron. Esto significa queLANG
yLANGUAGE
yLC_MESSAGES
yLC_ALL
son variables de entorno y el resto de las variables locales no lo son, y tampoco son variables de shell.LANG
,LANGUAGE
,LC_MESSAGES
yLC_ALL
. (O lo hiciste explícitamente o tu distribución o el administrador de tu sistema lo hicieron por ti). ¡Puedes establecer una variable de entorno con cualquier nombre (sintácticamente válido)! Pero algunos nombres son significativos para alguna aplicación, y algunos nombres no lo son.LC_MESSAGES
,LC_CTYPE
,LC_TIME
Y así sucesivamente son utilizados por las aplicaciones que se preocupan por el idioma de los mensajes de error, la codificación de caracteres, el formato de hora, y así sucesivamente.LC_ALL
anula todas las demás configuraciones, por lo que el valor de las otras variables locales no importa. Normalmente solo se usa temporalmente para forzar a un programa a usar una configuración regional determinada, no tiene sentido tenerlo en su entorno normal.En las distribuciones basadas en Fedora / CentOS / RHEL, creo que puede cambiar la configuración regional a una de las configuraciones regionales que se muestran cuando ejecuta el
locale -a
comando en este archivo del sistema:Por ejemplo en mi sistema Fedora 14:
En GNOME puedes ejecutar la aplicación de ayuda:
Lo que muestra esta GUI:
Creo que es ligeramente diferente para las distribuciones Debian / Ubuntu. Creo que es este archivo:
Creo que son variables de entorno, pero no estoy del todo seguro de cómo las usan las aplicaciones, si es que lo hacen.
Referencias
fuente
Al menos en RedHat 6, tenga en cuenta que si se establece LC_ALL, la configuración de otras variables de entorno LC_ * no tendrá ningún efecto, ya que LC_ALL tiene prioridad sobre todas las demás variables de entorno LC_ *.
fuente
En los sistemas Debian, se puede ejecutar
dpkg-reconfigure locales
para configurar el idioma principal y hacer que otros estén disponibles; entonces se puede ejecutarupdate-locale
para configurar laLANGUAGE
variable de entorno/etc/default/locale
para tener idiomas de reserva.fuente
dpkg-reconfigure locales
, nolocale