¿En qué debería establecer mi configuración regional y cuáles son las implicaciones de hacerlo?

19

Esta pregunta fue estimulada al hacer la pregunta El navegador Chromium no permite configurar el tamaño de papel predeterminado para "Imprimir en archivo" , y también mediante una conversación con @Gilles en el chat. Como lo señaló @don_crissti, y como lo verifiqué yo, cambiar la configuración regional (al menos LC_PAPER) hace una diferencia en el tamaño de papel seleccionado.

Nunca había pensado mucho en qué seleccionar, y siempre me había ido en_US.UTF-8porque parecía una opción predeterminada razonable.

Sin embargo, según @Gilles en el chat (consulte la conversación que comienza en http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Extractos:

Gilles: LC_PAPER por defecto es $ LANG

Gilles: debes tener LANG = en_US.UTF-8. Esa es una mala idea: establece LC_COLLATE y eso casi siempre es algo malo

Gilles: LC_COLLATE no describe la clasificación correcta, es demasiado restrictivo (va carácter por carácter) elimina LANG y en su lugar establece LC_CTYPE y LC_PAPER

Gilles: más LC_MESSAGES si quieres mensajes en un idioma que no sea inglés

Claramente, hay problemas aquí que no conozco, y estoy seguro de que muchos otros también lo están. Entonces, ¿qué problemas debe tener en cuenta al configurar las configuraciones regionales y cómo debe configurarlos? Siempre he corrido dpkg-reconfigure localesen Debian, y no lo pensé dos veces.

Pregunta específica: ¿Debo establecer mi configuración regional en en_IN.UTF-8? ¿Hay algún inconveniente en hacerlo?

Ver también: ¿LC_COLLATE (debería) afectar los rangos de caracteres?

Faheem Mitha
fuente

Respuestas:

29

La configuración regional son las preferencias del usuario que se relacionan con su cultura.

Nombres locales

En todas las variantes actuales de Unix que conozco (pero no en algunas antigüedades), los nombres locales siguen el mismo patrón:

  • Un código de idioma de dos letras minúsculas ISO 639-1 , o un código de idioma de tres letras ISO 639-2 si el idioma no tiene código de dos letras. Por ejemplo, enpara inglés, dealemán, jajaponés, ukucraniano, berbereber, ...
  • Para muchos pero no todos los idiomas, un guión bajo _seguido de un código de país de dos letras en mayúsculas ISO 3166 . Así: en_USpara inglés estadounidense, inglés en_UKbritánico, francés fr_CAcanadiense (Québec), de_DEalemán de Alemania, de_ATalemán de Austria, ja_JPjaponés (de Japón), etc.
  • Opcionalmente, un punto .seguido por el nombre de una codificación de caracteres tales como UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, etc, con GNU libc al menos (no sé cómo esto es generalizada), la caja y puntuacion es ignorado en la codificación de nombres. Por ejemplo, el zh_CN.UTF-8chino mandarín (simplificado) está codificado en UTF-8, mientras zh_CNque el chino mandarín está codificado en GB2312 y el zh_TWchino taiwanés (tradicional) está codificado en Big5.
  • Opcionalmente, un signo at @seguido del nombre de una variante. El significado de las variantes depende de la configuración regional. Por ejemplo, muchos países europeos tienen una @eurovariante de configuración regional donde el signo de moneda es € y donde la codificación es una que incluye este carácter (ISO 8859-15 o ISO 8859-16), a diferencia de la variante sin adornos con el signo de moneda más antiguo. Por ejemplo, en_IE(inglés, Irlanda) usa la codificación latin1 (ISO 8859-1) y £ como el símbolo de la moneda, mientras que en_IE@eurousa la codificación latin9 (ISO 8859-15) y € como el símbolo de la moneda.

Además, hay dos nombres locales que existen en todos los sistemas tipo Unix: Cy POSIX. Estos nombres son sinónimos y significan computación, es decir, configuraciones predeterminadas que son apropiadas para los datos analizados por un programa de computadora.

Configuraciones locales

POSIX define las siguientes categorías locales :

  • LC_CTYPE: el conjunto de caracteres utilizado por las aplicaciones de terminal: datos de clasificación (qué caracteres son letras, puntuación, espacios, inválidos, etc.) y conversión de mayúsculas y minúsculas. Las utilidades de texto suelen prestar atención LC_CTYPEpara determinar los límites de los caracteres.
  • LC_COLLATE: orden de clasificación (es decir, clasificación). Esta configuración es de uso muy limitado por varias razones:
    • La mayoría de los idiomas tienen reglas complejas que dependen de lo que se está ordenando (por ejemplo, las palabras del diccionario y los nombres propios pueden no usar el mismo orden) y no se pueden expresar por LC_COLLATE.
    • Existen pocas aplicaciones en las que el orden de clasificación adecuado es realizado por un software que utiliza la configuración regional. Por ejemplo, los procesadores de texto almacenan el idioma y la codificación de un archivo en el archivo mismo (de lo contrario, el archivo no se procesaría correctamente en un sistema con configuraciones locales diferentes) y no les importan las configuraciones locales especificadas por el entorno.
    • LC_COLLATEpuede tener efectos secundarios desagradables, en particular porque causa el orden de clasificación A <a <B <..., que hace que "entre A y Z" incluya las letras minúsculas de a a y. En particular, las expresiones regulares muy comunes como [A-Z]romper algunas aplicaciones .
  • LC_MESSAGES: el lenguaje de los mensajes informativos y de error.
  • LC_NUMERIC: formato de número: separador decimal y de miles.
    Muchas aplicaciones codifican .como separador decimal. Esto hace que LC_NUMERICno sea muy útil y potencialmente peligroso:
    • Incluso si lo configura, verá el formato predeterminado con bastante frecuencia.
    • Es probable que se encuentre en una situación en la que una aplicación produce una salida dependiente de la configuración regional y otra aplicación espera .ser el punto decimal o ,un separador de campo.
  • LC_MONETARY: como LC_NUMERIC, pero para cantidades de moneda local.
    Muy pocas aplicaciones usan esto.
  • LC_TIME: formato de fecha y hora: nombres de semana y mes, reloj de 12 o 24 horas, orden de partes de fecha, puntuación, etc.

GNU libc, que encontrarás en Linux no incrustado, define categorías locales adicionales:

  • LC_PAPER: el tamaño de papel predeterminado (definido por la altura y el ancho).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: No sé de cualquier aplicación que utiliza éstos.

Variables de entorno

Las aplicaciones que usan la configuración regional los determinan a partir de variables de entorno.

  • Luego, LANGse utiliza el valor de la variable de entorno a menos que sea anulado por otra configuración. Si LANGno está configurado, la configuración regional predeterminada es C.
  • Los LC_xxxnombres se pueden usar como variables de entorno.
  • Si LC_ALLse establece, todos los demás valores se ignoran; Esto es principalmente útil para configurar LC_ALL=Caplicaciones de ejecución que necesitan producir la misma salida independientemente de dónde se ejecuten.
  • Además, GNU libc utilizaLANGUAGE para definir retrocesos para LC_MESSAGES(por ejemplo, LANGUAGE=fr_BE:fr_FR:enpara preferir francés belga, o si no está disponible francés francés, o si no está disponible inglés).

Instalar locales

Los datos locales pueden ser grandes, por lo que algunas distribuciones no los envían de forma utilizable y, en cambio, requieren un paso de instalación adicional.

  • En Debian, para instalar configuraciones regionales, ejecute dpkg-reconfigure localesy seleccione de la lista en el cuadro de diálogo, o edite /etc/locale.geny luego ejecute locale-gen.
  • En Ubuntu, para instalar configuraciones regionales, ejecute locale-gencon los nombres de las configuraciones regionales como argumentos.

Puede definir su propio entorno local .

Recomendación

Las configuraciones útiles son:

  • Establezca LC_CTYPEel idioma y la codificación en los que codifica sus archivos de texto. Asegúrese de que sus terminales usen esa codificación.
    Para la mayoría de los idiomas, solo importa la codificación. Hay algunas excepciones; por ejemplo, una mayúscula iestá Ien la mayoría de los idiomas pero İen turco ( tr_TR).
  • Establezca LC_MESSAGESel idioma en el que desea ver los mensajes.
  • Establecer LC_PAPERa en_USsi desea carta de los EEUU para ser el tamaño de papel predeterminado y casi cualquier otra cosa (por ejemplo en_GB) si desea A4.
  • Opcionalmente, configure LC_TIMEsu formato de hora favorito.

Como se explicó anteriormente, evite configurar LC_COLLATEy LC_NUMERIC. Si usa LANG, anule explícitamente estas dos categorías configurándolas en C.

Gilles 'SO- deja de ser malvado'
fuente
Hola Gilles, gracias por la respuesta detallada. ¿Dónde es un buen lugar para anular la configuración predeterminada en Debian? Como necesito un tamaño de papel A4, creo que necesito anular el valor predeterminado de LC_PAPER. ¿Y puedo actualizar esto en todo el sistema sin reiniciar?
Faheem Mitha
1
@FaheemMitha ¿Cuál es la mejor forma de distribución / agnóstico de shell para establecer variables de entorno? Y si desea configurarlo en todo el sistema, en Debian, también lo hay /etc/default/locale. Estos archivos surten efecto cuando inicia sesión; puede hacerlo export LC_PAPER=…en un shell para afectar los comandos iniciados desde ese shell
Gilles 'SO- deja de ser malvado'