Next: , Previous: , Up: Configuración del sistema   [Contents][Index]


11.9 Localizaciones

Una localización define convenciones culturales para una lengua y región del mundo particular (see Locales in The GNU C Library Reference Manual). Cada localización tiene un nombre que típicamente tiene la forma de lengua_territorio.codificación—por ejemplo, fr_LU.utf8 designa la localización para la lengua francesa, con las convenciones culturales de Luxemburgo, usando la codificación UTF-8.

Normalmente deseará especificar la localización predeterminada para la máquina usando el campo locale de la declaración operating-system (see locale).

La localización seleccionada es automáticamente añadida a las definiciones de localización conocidas en el sistema si es necesario, con su codificación inferida de su nombre—por ejemplo, se asume que bo_CN.utf8 usa la codificación UTF-8. Definiciones de localización adicionales pueden ser especificadas en el campo locale-definitions de operating-system—esto es util, por ejemplo, si la codificación no puede ser inferida del nombre de la localización. El conjunto predeterminado de definiciones de localización incluye algunas localizaciones ampliamente usadas, pero no todas las disponibles, para ahorrar espacio.

Por ejemplo, para añadir la localización del frisio del norte para Alemania, el valor de dicho campo puede ser:

(cons (locale-definition
        (name "fy_DE.utf8") (source "fy_DE"))
      %default-locale-definitions)

De mismo modo, para ahorrar espacio, se puede desear que locale-definitions contenga únicamente las localizaciones que son realmente usadas, como en:

(list (locale-definition
        (name "ja_JP.eucjp") (source "ja_JP")
        (charset "EUC-JP")))

Las definiciones de localización compiladas están disponibles en /run/current-system/locale/X.Y, donde X.Y es la versión de libc, que es la ruta donde la GNU libc contenida en Guix buscará los datos de localización. Esto puede ser sobreescrito usando la variable de entorno LOCPATH (see LOCPATH and locale packages).

La forma locale-definition es proporcionada por el módulo (gnu system locale). Los detalles se proporcionan a continuación.

Tipo de datos: locale-definition

Este es el tipo de datos de una definición de localización.

name

El nombre de la localización. See Locale Names in The GNU C Library Reference Manual, para más información sobre nombres de localizaciones.

source

El nombre de la fuente para dicha localización. Habitualmente es la parte idioma_territorio del nombre de localización.

charset (predeterminado: "UTF-8")

La “codificación de caracteres” o “conjunto de caracteres” para dicha localización, como lo define IANA.

Variable: %default-locale-definitions

Una lista de localizaciones UTF-8 usadas de forma común, usada como valor predeterminado del campo locale-definitions en las declaraciones operating-system.

Estas definiciones de localizaciones usan la codificación normalizada para el fragmento tras el punto en el nombre (see normalized codeset in The GNU C Library Reference Manual). Por lo que por ejemplo es válido uk_UA.utf8 pero no, digamos, uk_UA.UTF-8.

11.9.1 Consideraciones sobre la compatibilidad de datos de localización

Las declaraciones operating-system proporcionan un campo locale-libcs para especificar los paquetes GNU libc que se usarán para compilar las declaraciones de localizaciones (see Referencia de operating-system). “¿Por qué debo preocuparme?”, puede preguntarse. Bueno, sucede que el formato binario de los datos de localización es ocasionalmente incompatible de una versión de libc a otra.

Por ejemplo, un programa enlazado con la versión 2.21 de libc no puede leer datos de localización producidos con libc 2.22; peor aún, ese programa aborta en vez de simplemente ignorar los datos de localización incompatibles36. De manera similar, un programa enlazado con libc 2.22 puede leer la mayor parte, pero no todo, de los datos de localización de libc 2.21 (específicamente, los datos LC_COLLATE son incompatibles); por tanto las llamadas a setlocale pueden fallar, pero los programas no abortarán.

El “problema” con Guix es que las usuarias tienen mucha libertad: pueden elegir cuando e incluso si actualizar el software en sus perfiles, y pueden estar usando una versión de libc diferente de la que la administradora del sistema usó para construir los datos de localización comunes a todo el sistema.

Por suerte, las usuarias sin privilegios también pueden instalar sus propios datos de localización y definir GUIX_LOCPATH de manera adecuada (see GUIX_LOCPATH y paquetes de localizaciones).

No obstante, es mejor si los datos de localización globales del sistema en /run/current-system/locale se construyen para todas las versiones de libc realmente en uso en el sistema, de manera que todos los programas puedan acceder a ellos—esto es especialmente crucial en un sistema multiusuaria. Para hacerlo, la administradora puede especificar varios paquetes libc en el campo locale-libcs de operating-system:

(use-package-modules base)

(operating-system
  ;; …
  (locale-libcs (list glibc-2.21 (canonical-package glibc))))

Este ejemplo llevaría a un sistema que contiene definiciones de localización tanto para libc 2.21 como para la versión actual de libc en /run/current-system/locale.


Footnotes

(36)

Las versiones 2.23 y posteriores de GNU libc simplemente ignorarán los datos de localización incompatibles, lo cual ya es un avance.


Next: Servicios, Previous: Distribución de teclado, Up: Configuración del sistema   [Contents][Index]