Next: Servicios, Previous: Distribución de teclado, Up: Configuración del sistema [Contents][Index]
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.
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.
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
.
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
incompatibles35. 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.
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]