¿Qué significan exactamente las cadenas de configuración regional LC_* en Linux?

¿Qué significan exactamente las cadenas de configuración regional LC_* en Linux?

Cuando escribo en mi símbolo del sistema de Linux

locale

Obtengo una larga lista de LC_*variables (como LC_TIMEetc.). El valor de las variables se parece a los de esta lista:

en_US.8859-1
de_DE@euro
fr_FR.utf-8

¿Qué significan exactamente las partes individuales?

Sé que @euroes idéntico .8859-15y, en general, la última parte significa el juego de caracteres real (la asignación de bytes a símbolos reales). Pero, ¿qué "hacen" exactamente los dos primeros códigos? ¿En qué propiedades del sistema influyen? Por ejemplo (solo para tener algún ejemplo con el que trabajar), ¿cuál es la diferencia entre en_US.8859-15, de_DE.8859-15y ? Todos tienen exactamente el mismo juego de caracteres, por lo que todos los archivos de texto que abro en el editor de mi elección tendrán el mismo aspecto. Entonces, ¿qué pasaría si cambio de un "código previo al juego de caracteres" a otro "código previo al juego de caracteres" (como de a )?de_CH.8859-15en_CU.8859-15de_CHen_US

¿Hay alguna tabla que enumere las diferencias en una tabla agradable y fácil de leer?

Respuesta1

Las dos partes forman unaCódigo de idioma ISO-639. La primera parte es el lenguaje mismo, y la segunda es (generalmente) unacódigo de paísespecificando qué variante local.

Puedes observar el efecto del cambio LANGcon casi cualquier programa que tenga traducciones. LC_COLLATEafecta los resultados del sortprograma; LC_DATEafecta la salida de datey ls -l. Para algunas configuraciones locales, es posible (incluso probable) que no tengas nada instalado que las use.

En la mayoría de los sistemas, solo LC_LANGestá configurado y todas las demás configuraciones se heredan de eso.

La siguiente cita de la página de manual de locale(7) es relevante:

LC_COLLATE
Esto se usa para cambiar el comportamiento de las funciones strcoll(3) y strxfrm(3), que se usan para comparar cadenas en el alfabeto local. Por ejemplo, la s sostenida alemana se clasifica como "ss".
LC_CTYPE
Esto cambia el comportamiento de las funciones de clasificación y manejo de caracteres, como isupper(3) y toupper(3), y las funciones de caracteres multibyte como mblen(3) o wctomb(3).
LC_MONETARIO
cambia la información devuelta por localeconv(3), que describe la forma en que normalmente se imprimen los números, con detalles como punto decimal versus coma decimal. Esta información es utilizada internamente por la función strfmon(3).
LC_MESSAGES
cambia el idioma en el que se muestran los mensajes y cómo se ve una respuesta afirmativa o negativa. La biblioteca C de GNU contiene las funciones gettext(3), ngettext(3) y rpmatch(3) para facilitar el uso de esta información. La familia de funciones GNU gettext también obedece a la variable de entorno LANGUAGE (que contiene una lista de configuraciones regionales separadas por dos puntos) si la categoría está configurada en una configuración regional válida distinta de "C".
LC_NUMERIC
cambia la información utilizada por la familia de funciones printf(3) y scanf(3), cuando se les recomienda utilizar la configuración regional. Esta información también se puede leer con la función localeconv(3).
LC_TIME
cambia el comportamiento de la función strftime(3) para mostrar la hora actual en una forma aceptable localmente; por ejemplo, la mayor parte de Europa utiliza un reloj de 24 horas, frente al de 12 horas que se utiliza en Estados Unidos.
LC_ALLTodo lo anterior.

información relacionada