Locale (Español)
Los locales, mejor conocidos en español como configuraciones regionales, son utilizados por glibc y otros programas que los respetan, o por librerías cuyo propósito es renderizar texto, mostrar montos monetarios regionales correctamente, formatos de fecha y hora, cuestiones alfabéticas y otros estándares específicos de los locales.
Generando locales
Los nombres de los locales típicamente siguen la estructura de lenguaje[_territorio][.códigoCaracter][@modificador], siendo lenguaje un código de idioma de ISO 639, territorio un código de país de ISO 3166, y códigoCaracter es una codificación de caracteres o identificador de codificación, como ISO-8859-1 o UTF-8. Vea setlocale(3).
Para listar los locales habilitados, ejecute:
$ locale --all-locales
Para poder habilitar un locale en el sistema, primero debe generarse. Esto se puede lograr descomentando las entradas deseadas en /etc/locale.gen y ejecutando locale-gen. Del mismo modo, si se comentan entradas, se deshabilitan esas configuraciones. Al hacer cambios, considere cualquier configuración que pueda ser requerida por otros usuarios del sistema, así como también #Variables específicas.
Por ejemplo, para el español, descomente es_ES.UTF-8 UTF-8 (así como también en_US.UTF-8 UTF-8, ya que es usualmente utilizado como alternativa por varias herramientas):
/etc/locale.gen
... #de_CH ISO-8859-1 es_ES.UTF-8 UTF-8 #de_DE ISO-8859-1 ... #en_SG ISO-8859-1 en_US.UTF-8 UTF-8 #en_US ISO-8859-1 ...
Guarde el archivo y genere la configuración:
# locale-gen
Estableciendo el locale
Para ver el locale actual junto a sus variables de entorno relacionadas, escriba:
$ locale
El locale a utilizarse de entre los generados con anterioridad se define en archivos locale.conf. Cada uno de estos debe contener una lista de variables de entorno separadas por saltos de línea, respetando el formato utilizado por locale.
Para listar los locales disponibles generados previamente, ejecute:
$ localedef --list-archive
O, alternativamente, use localectl(1):
$ localectl list-locales
Estableciendo el locale del sistema
Para establecer el locale del sistema, escriba la variable LANG en /etc/locale.conf, donde es_ES.UTF-8 corresponde a la primer columna de alguna entrada descomentada en /etc/locale.gen:
/etc/locale.conf
LANG=es_ES.UTF-8
O, como alternativa, ejecute:
# localectl set-locale LANG=es_ES.UTF-8
Vea #Variables y locale.conf(5) para más detalles.
Sobreescribir el locale del sistema por usuario
Se puede sobreescribir el locale del sistema en cada sesión de usuario al crear o editar $XDG_CONFIG_HOME/locale.conf (por lo general, ~/.config/locale.conf).
El orden de presedencia de estos archivos locale.conf se encuentra definido en /etc/profile.d/locale.sh.
- Esto también permite conservar los logs en
/var/log/en inglés y utilizar otro lenguaje en el entorno de usuario. - Se puede crear un archivo
/etc/skel/.config/locale.confpara que a los usuarios añadidos al sistema con el comando useradd y la opción-mse les genere automáticamente un archivo~/.config/locale.conf. Vea Users and groups#Changing user defaults.
Hacer inmediatos los cambios de configuración regional
Luego de crear o modificar los archivos locale.conf de sistema y usuario, sus nuevos valores surtirán efecto al iniciar una nueva sesión. Para aplicar los nuevos valores al entorno actual, desconfigure LANG y cargue /etc/profile.d/locale.sh:
$ unset LANG $ source /etc/profile.d/locale.sh
LANG primero, locale.sh no actualizará los valores definidos en locale.conf. Únicamente se actualizarán las variables nuevas o modificadas; las que se hayan eliminado de locale.conf permanecerán en la sesión.Otros usos
Las variables regionales también pueden ser definidas con los métodos estándares definidos en Variables de entorno.
Por ejemplo, para probar o debuggear un programa particular durante su desarrollo, se puede iniciar con un comando como:
$ LC_ALL=C.UTF-8 ./my_application.sh
De manera similar, para establecer un locale para todos los procesos que se ejecuten en la consola actual (por ejemplo, durante la instalación del sistema), use:
$ export LC_ALL=C.UTF-8
Variables
Los archivos locale.conf suportan las siguientes variables de entorno:
- LANG
- LANGUAGE
LC_ADDRESS- LC_COLLATE
LC_CTYPELC_IDENTIFICATIONLC_MEASUREMENTLC_MESSAGESLC_MONETARYLC_NAMELC_NUMERICLC_PAPERLC_TELEPHONE- LC_TIME
El significado completo de las variables LC_* aquí listadas se puede encontrar en la página man locale(7), y los detalles de su definición se describen en locale(5).
LANG: locale por defecto
El locale establecido en esta variable será utilizado para todas las demás variables LC_* que no se definan explícitamente.
LANG como en_US.UTF-8 y la variable LC_MESSAGES (traducción de mensajes de interfaz de usuario) como es_ES.UTF-8.LANGUAGE: locales de respaldo
Los programas que usan gettext para sus traducciones respetan, además de las variables usuales, la opción LANGUAGE. Esto permite a los usuarios especificar una lista de locales que se utilizarán según el orden de la misma. Si una traducción para el locale preferido no está disponible, en lugar de recurrir al texto por defecto, se utilizará la traducción de una configuración regional similar. Por ejemplo, puede que un usuario inglés prefiera recurrir al inglés británico en lugar del americano:
locale.conf
LANG=en_AU.UTF-8 LANGUAGE=en_AU:en_GB:en
en o en_US, pero utilizan, en cambio, el locale por defecto: C. Si se coloca un locale que no sea inglés en LANGUAGE luego de uno inglés, por ejemplo
LANGUAGE=en_US:en:es_ES, puede que algunas aplicaciones opten por el locale secundario a pesar de que el texto inglés esté disponible.[3] La solución es incluir siempre el locale C luego del inglés: LANGUAGE=en_US:en:C:es_ES.LC_TIME: formato de fecha y hora
Si se establece LC_TIME como, por ejemplo, es_ES.UTF-8, el formato de fecha será "DD/MM/YYYY". Si se desea usar el formato ISO 8601, que es "YYYY-MM-DD", una opción es:
locale.conf
LC_TIME=en_DK.UTF-8
Puede imprimir la fecha y hora actual con su locale preferido usando date +"%c".
En el caso de usuarios que utilicen en_US.UTF-8, glibc 2.29 corrigió un error, y empezó a mostrarlo con un formato de 12 horas, como siempre debió ser. Si se desea utilizar un formato de 24 horas, use LC_TIME=C.UTF-8.
LC_COLLATE: colación
Esta variable regula las reglas de colación utilizadas para ordenamiento y expresiones regulares.
Establecer su valor como C.UTF-8 puede hacer que, por ejemplo, el comando ls ordene los dotfiles primero, seguidos de nombres de archivo en mayúsculas y minúsculas:
locale.conf
LC_COLLATE=C.UTF-8
Vea también [4].
LC_ALL: solución de problemas
El locale que se establezca en esta variable siempre sobreescribirá LANG y todas las demás variables LC_*, sin importar si están configuradas o no. Si LC_ALL se establece como C o C.UTF-8, sobreescribirá también LANGUAGE.
LC_ALL es la única variable LC_* que no se puede configurar en archivos locale.conf: su propósito es únicamente el de testeo o solución de problemas, estableciéndola por ejemplo en /etc/profile.
Solución de problemas
Para problemas de codificación, revise Character encoding#Troubleshooting.
Mi sistema aún está usando el idioma incorrecto
Es posible que las variables de entorno se encuentren redefinidas en otros archivos además de locale.conf. Vea Environment variables#Cómo definir variables para más detalles.
Si está usando un entorno de escritorio, como puede ser GNOME, es posible que su configuración de idioma tome presedencia sobre lo definido en locale.conf.
KDE Plasma también permite cambiar el idioma de la interfaz de usuario mediante los ajustes del sistema. Si el entorno de escritorio sigue usando el idioma por defecto luego de haberlo modificado, eliminar el archivo ~/.config/plasma-localerc (anteriormente: ~/.config/plasma-locale-settings.sh) debería resolver el problema.
Si está utilizando un gestor de inicio de sesión junto a accountsservice, siga las instrucciones en Display manager#Establecer el idioma para la sesión de usuario.
LightDM usará accountsservice automáticamente para configurar el locale del usuario, si es que está instalado. Caso contrario, LightDM almacena la configuración de la sesión de usuario en ~/.dmrc. Es posible también que se esté leyendo alguna configuración desde allí.
Usar un locale personalizado ocasiona problemas
Al instalar un locale que no sea soportado oficialmente (por ejemplo, locale-en_xxAUR), pueden surgir algunos problemas, como ser que las teclas de composición no funcionen en algunas aplicaciones, o que las aplicaciones reporten locales faltantes.
Tras instalar un locale personalizado, será requerido intervenir manualmente para resolver estos problemas.
Hay dos maneras (reemplace en_XX.UTF-8 con el identificador de su locale personalizado):
Configure LC_CTYPE
Configure LC_CTYPE con un locale que sea soportado oficialmente (como en_US.UTF-8), por ejemplo:
/etc/locale.conf
LANG=en_XX.UTF-8 LC_CTYPE=en_US.UTF-8
Modifique la base de datos de Xlib
Modifique la base de datos de Xlib añadiendo lo siguiente:
/usr/share/X11/locale/locale.dir
en_US.UTF-8/XLC_LOCALE en_XX.UTF-8 en_US.UTF-8/XLC_LOCALE: en_XX.UTF-8
/usr/share/X11/locale/compose.dir
en_US.UTF-8/Compose en_XX.UTF-8 en_US.UTF-8/Compose: en_XX.UTF-8
Usar el sistema métrico con un locale inglés
En algunas herramientas, el sistema de unidades se elige de acuerdo a los ajustes de locale; por lo tanto, las temperaturas se mostrarán en Fahrenheit si se utilizan locales ingleses. Si prefiere usar el sistema métrico con un locale inglés, añadir LC_MEASUREMENT=C.UTF-8 (o cualquier otro locale para el que locale -ck LC_MEASUREMENT devuelva measurement=1) a /etc/locale.conf debería funcionar si es que la herramienta revisa también LC_MEASUREMENT en lugar de solamente fijarse en el país. [5]