locale(7) Miscellaneous Information Manual locale(7)

locale - descripción del soporte para múltiples idiomas

#include <locale.h>

Una localización regional (locale) es un conjunto de reglas culturales e idiomáticas que abarcan aspectos tales como el idioma usado para mensajes, diferentes conjuntos de caracteres, convenciones lexicas, etc. Un programa debe poder determinar su localización y actuar en consecuencia para poder portarse a diferentes culturas.

El encabezado <locale.h> declara tipos de datos, funciones y macros útiles para esta tarea.

Las funciones que se declaran son setlocale(3) para establecer la localización actual, y localeconv(3) para obtener información acerca de formatos numéricos.

Un programa puede necesitar varias categorías de información local, las cuales se determinan utilizando macros. Usando una de estas categorías como primer argumento para la función setlocale(3) es posible modificar uno de los siguientes atributos para que usen la localización adecuada:

Modifica la configuración que describe los formatos (como por ejemplo las direcciones postales) utilizados para describir ubicaciones y elementos relacionados con la geografía. Las aplicaciones que necesitan esta información pueden usar nl_langinfo(3) para obtener elementos no estándar, como _NL_ADDRESS_COUNTRY_NAME (nombre del país, en su configuración regional) y _NL_ADDRESS_LANG_NAME (nombre del idioma, en el idioma de su configuración regional), que devolverían cadenas como 'Deutschland' y 'Deutsch' para configuraciones regionales en alemán. En <langinfo.h> figuran otros nombres de elementos.
Esta categoría rige las reglas de clasificación utilizadas para la ordenación y las expresiones regulares, incluidas las clases de equivalencia de caracteres y los elementos de clasificación de varios caracteres. Esta categoría de configuración regional cambia el comportamiento de las funciones strcoll(3) y strxfrm(3), que se utilizan para comparar cadenas en el alfabeto local. Por ejemplo, la s sostenida alemana se clasifica como 'ss'.
Esta categoría determina la interpretación de secuencias de bytes como caracteres (por ejemplo, caracteres de un solo byte o multibyte), clasificaciones de caracteres (por ejemplo, alfabéticos o dígitos) y el comportamiento de las distintas clases de caracteres. En los sistemas glibc, esta categoría también determina las reglas de transliteración de caracteres para iconv(1) y iconv(3). 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).
Modifica la parte de la configuración relacionada con los metadatos de la configuración regional. Las aplicaciones que necesitan esta información pueden usar nl_langinfo(3) para recuperar elementos no estándar, como _NL_IDENTIFICATION_TITLE (título de este documento de configuración local) y _NL_IDENTIFICATION_TERRITORY (territorio geográfico al que se aplica este documento local), esto retornará cadenas como 'Configuración regional en inglés para EE. UU.' y 'EE. UU.'. En <langinfo.h> se encuentran otros nombres de elementos.
Esta categoría determina el formato utilizado para los valores numéricos relacionados con temas monetarios. Esto cambia la información devuelta por localeconv(3), que describe la forma en que normalmente se muestran los números, con detalles como punto decimal o bien con coma decimal. Esta información es utilizada internamente por la función strfmon(3).
Esta categoría afecta el idioma en el que se muestran los mensajes y el aspecto de una respuesta afirmativa o negativa. La biblioteca GNU C 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 observa 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". Esta categoría también afecta al comportamiento de catopen(3).
Modifica las configuraciones relacionadas con el sistema de medidas local (es decir, unidades métricas frente unidades habituales de EE. UU.). Las aplicaciones pueden usar nl_langinfo(3) para obtener el elemento _NL_MEASUREMENT_MEASUREMENT no estándar, que devuelve un puntero a un carácter que tiene el valor 1 (métrico) o 2 (unidades habituales de EE. UU.).
Modifica la configuración que describe los formatos utilizados para dirigirse a las personas. Las aplicaciones que necesitan esta información pueden usar nl_langinfo(3) para recuperar elementos no estándar, como los elementos _NL_NAME_NAME_MR (saludo general para hombres) y _NL_NAME_NAME_MS (saludo general para mujeres), que devuelverían cadenas como ' Herr' y 'Frau' en la configuración regional alemana. Otros nombres de elementos se enumeran en <langinfo.h>.
Esta categoría determina las reglas de formato utilizadas para valores numéricos no monetarios—por ejemplo, el separador de miles y el carácter para separar los miles (un punto en la mayoría de los países de habla inglesa, pero una coma en muchas otras regiones). Afecta a funciones como printf(3), scanf(3) y strtod(3). Esta información también se puede leer con la función localeconv(3).
Modifica las configuraciones relacionadas con las dimensiones del tamaño de papel estándar (por ejemplo, carta estadounidense versus A4). Las aplicaciones que necesitan las dimensiones pueden obtenerlas usando nl_langinfo(3) para recuperar los elementos no estándar _NL_PAPER_WIDTH y _NL_PAPER_HEIGHT, que devuelven valores int que especifican las dimensiones en milímetros.
Modifica la configuración que describe los formatos que se utilizarán con los servicios telefónicos. Las aplicaciones que necesitan esta información pueden usar nl_langinfo(3) para recuperar elementos no estándar, como _NL_TELEPHONE_INT_PREFIX (prefijo internacional utilizado para llamar a números en esta configuración regional), que devuelvería una cadena como '49' para Alemania. (Otros nombres de elementos se enumeran en <langinfo.h>.)
Esta categoría rige el formato utilizado para los valores de fecha y hora. Por ejemplo, la mayor parte de Europa utiliza un formato de 24 horas, frente al de 12 horas que se utiliza en Estados Unidos. La configuración de esta categoría afecta al comportamiento de funciones como strftime(3) y strptime(3).
Todas las categorías anteriores.

Si el segundo argumento de setlocale(3) es una cadena vacía, "", para la configuración regional predeterminada, se determina mediante estos pasos:

(1)
Si la variable de entorno LC_ALL existe y tiene un valor no nulo, se usa este valor.
(2)
Si existe una variable de entorno con el mismo nombre que una de las categorías, y su valor es no nulo, se usa ese valor para dicha categoría.
(3)
Si la variable de entorno LANG, existe y su valor no es vacío, se usa dicho valor.

Se puede obtener información sobre el formato numérico local usando la estructura struct lconv devuelta por la función localeconv(3). Dicha estructura tiene la siguiente declaración:


struct lconv {
    /* Numeric (nonmonetary) information */
    char *decimal_point;     /* Radix character */
    char *thousands_sep;     /* Separator for digit groups to left
                                of radix character */
    char *grouping;     /* Each element is the number of digits in
                           a group; elements with higher indices
                           are further left.  An element with value
                           CHAR_MAX means that no further grouping
                           is done.  An element with value 0 means
                           that the previous element is used for
                           all groups further left. */
    /* Remaining fields are for monetary information */
    char *int_curr_symbol;   /* First three chars are a currency
                                symbol from ISO 4217.  Fourth char
                                is the separator.  Fifth char
                                is '\0'. */
    char *currency_symbol;   /* Local currency symbol */
    char *mon_decimal_point; /* Radix character */
    char *mon_thousands_sep; /* Like thousands_sep above */
    char *mon_grouping;      /* Like grouping above */
    char *positive_sign;     /* Sign for positive values */
    char *negative_sign;     /* Sign for negative values */
    char  int_frac_digits;   /* International fractional digits */
    char  frac_digits;       /* Local fractional digits */
    char  p_cs_precedes;     /* 1 if currency_symbol precedes a
                                positive value, 0 if succeeds */
    char  p_sep_by_space;    /* 1 if a space separates
                                currency_symbol from a positive
                                value */
    char  n_cs_precedes;     /* 1 if currency_symbol precedes a
                                negative value, 0 if succeeds */
    char  n_sep_by_space;    /* 1 if a space separates
                                currency_symbol from a negative
                                value */
    /* Positive and negative sign positions:
       0 Parentheses surround the quantity and currency_symbol.
       1 The sign string precedes the quantity and currency_symbol.
       2 The sign string succeeds the quantity and currency_symbol.
       3 The sign string immediately precedes the currency_symbol.
       4 The sign string immediately succeeds the currency_symbol. */
    char  p_sign_posn;
    char  n_sign_posn;
};

POSIX.1-2008 estandarizó una serie de extensiones para la API local, basadas en implementaciones que aparecieron por primera vez en glibc 2.3. Estas extensiones fueron diseñadas para abordar el problema de interrelación de las API de configuración regional tradicionales con aplicaciones multiproceso y con aplicaciones que deben manejar múltiples configuraciones regionales.

Las extensiones toman la forma de nuevas funciones para crear y manipular objetos locales (newlocale(3), freelocale(3), duplocale(3) y uselocale(3)) y varias nuevas funciones de biblioteca con el sufijo '_l' (por ejemplo, toupper_l(3)) que amplían las API tradicionales dependientes de la configuración regional (por ejemplo, toupper(3)) para permitir la especificación de un objeto de configuración regional que debe aplicarse al ejecutar la función.

newlocale(3) y setlocale(3) utilizan la siguiente variable de entorno y, por lo tanto, afecta a todos los programas localizados sin privilegios:

Lista de rutas, separados por dos puntos (':'), que deben usarse para buscar datos locales. Si se establece esta variable, solo se utilizan los archivos de datos locales individuales de LOCPATH y la ruta de datos local predeterminada del sistema; no se utilizan los archivos locales disponibles (consulte localedef(1)). Los archivos de datos locales compilados individuales se buscan en subdirectorios que dependen de la configuración regional utilizada actualmente. Por ejemplo, cuando se utiliza en_GB.UTF-8 para una categoría, se buscarán los siguientes subdirectorios, en este orden: en_GB.UTF-8, en_GB.utf8, en_GB, en.UTF-8, en.utf8 y en.

/usr/lib/locale/locale-archive
Ubicación habitual por defecto del archivo de la configuración regional.
/usr/lib/locale
Ruta predeterminada habitual para archivos locales individuales compilados.

POSIX.1-2001.

iconv(1), locale(1), localedef(1), catopen(3), gettext(3), iconv(3), localeconv(3), mbstowcs(3), newlocale(3), ngettext(3), nl_langinfo(3), rpmatch(3), setlocale(3), strcoll(3), strfmon(3), strftime(3), strxfrm(3), uselocale(3), wcstombs(3), locale(5), charsets(7), unicode(7), utf-8(7)

La traducción al español de esta página del manual fue creada por Diego Novillo <diego@cs.ualberta.ca>, Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.

15 Junio 2024 Páginas de Manual de Linux 6.9.1