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

LANGyLC_xxxson variables de entorno? mis pruebas muestran que soloLANGyLANGUAGEyLC_MESSAGESyLC_ALLson variables de entorno, mientras que otras variables comoLC_CTYPEyLC_MONETARYno son variables de entorno (además, no son variables de shell)env LC_TIME=en_GB dateconenv LC_TIME=fr_FR dateyenv 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)?printenvcomando para enumerar las variables de entorno de bash, y soloLANGyLANGUAGEyLC_MESSAGESyLC_ALLse enumeraron como variables de entorno. También ejecuté el comandoset -o posixseguido del comandosetpara obtener las variables de entorno y las variables de shell de bash, y soloLANGyLANGUAGEyLC_MESSAGESyLC_ALLse enumeraron. Esto significa queLANGyLANGUAGEyLC_MESSAGESyLC_ALLson variables de entorno y el resto de las variables locales no lo son, y tampoco son variables de shell.LANG,LANGUAGE,LC_MESSAGESyLC_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_TIMEY 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_ALLanula 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 -acomando 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 localespara configurar el idioma principal y hacer que otros estén disponibles; entonces se puede ejecutarupdate-localepara configurar laLANGUAGEvariable de entorno/etc/default/localepara tener idiomas de reserva.fuente
dpkg-reconfigure locales, nolocale