NOMBRE¶
setlocale - establece la localización en curso
SINOPSIS¶
#include <locale.h>
char *setlocale(int categoria, const char * localizacion);
DESCRIPCIÓN¶
La función
setlocale() se emplea para establecer o saber la
localización en curso del programa.
Si
localizacion no es
NULL, la localización actual del
programa se modifica según los argumentos. El argumento
categoria
determina qué partes de la localización actual del programa se deben
modificar.
- LC_ALL
- para todas las partes de la localización.
- LC_COLLATE
- para la concordancia en expresiones regulares (determina el
significado de las expresiones de rango y de las clases de equivalencia) y
la ordenación de cadenas.
- LC_CTYPE
- para la concordancia en expresiones regulares, la
clasificación de caracteres, la conversión, la comparación
sensible a mayúsculas/minúsculas y la funciones de caracteres
anchos.
- LC_MESSAGES
- para los mensajes del lenguaje natural que son
localizables.
- LC_MONETARY
- para el formato monetario.
- LC_NUMERIC
- para el formato de números (tal como el carácter
separador de decimales o el separador de miles).
- LC_TIME
- para los formatos de tiempo y fecha.
El argumento
localización es un puntero a una cadena de caracteres
que contiene la configuración necesaria de
categoría. Tal
cadena es bien una constante bien conocida como "C" o
"es_ES" (ver más abajo) o una cadena opaca devuelta por otra
llamada a
setlocale.
Si
localización es
"", cada parte de la
colalización que debe ser modificada se configura según las
variables de entorno. Los detalles son dependientes de la implementación.
Para glibc, primero se inspecciona la variable de entorno LC_ALL (sin tener en
cuenta la
categoría), a continuación la variable de entorno
con el mismo nombre que la categoría (LC_COLLATE, LC_CTYPE, LC_MESSAGES,
LC_MONETARY, LC_NUMERIC, LC_TIME) y, finalmente, la variable de entorno LANG.
Se usa la primera variable de entorno que exista. Si su valor no es una
especificación de localización válida, no se cambia la
localización y
setlocale devuelve NULL.
La localización
"C" o
"POSIX" es una
localización portable. Su parte LC_CTYPE corresponde al conjunto de
caracteres ASCII de 7 bits.
Típicamente, un nombre de localización es de la forma
lenguaje[_
territorio][.
conjuntocaract][@
modificador],
donde
lenguaje es un código de lenguaje ISO 639,
territorio
es un código de país ISO 3166, y
conjuntocaract es un
conjunto de caracteres o un identificador de codificación como
ISO-8859-1 o
UTF-8. Para una lista de todas las localizaciones
soportadas, pruebe "locale -a", cf.
locale(1).
Si
localización es
NULL, sólo se consulta la
localización actual, no se modifica.
Al comienzo del programa principal, se selecciona por omisión la
localización transportable
"C". Un programa puede
hacerse transportable para todas las localizaciones llamando a
setlocale(LC_ALL, "" ) tras el inicio del programa, empleando
los valores devueltos por una llamada a
localeconv() para la
información dependiente de la localización, utilizando las funciones
de caracteres anchos y multibyte para el procesamiento de texto si
MB_CUR_MAX > 1, y utilizando
strcoll(),
wcscoll() o
strxfrm(),
wcsxfrm() para comparar cadenas de caracteres.
VALOR DEVUELTO¶
Una llamada con éxito a
setlocale() devuelve una cadena de
caracteres opaca que corresponde a la localización establecida. Esta
cadena puede ser alojada en almacenamiento estático. La cadena devuelta
es tal que una llamada subsiguiente con esta cadena y su categoría
asociada, restaurará esa parte de la localización del proceso. La
función devuelve
NULL si la petición no puede ser satisfecha.
C ANSI, POSIX.1
OBSERVACIONES¶
Linux (esto es, GNU libc) admite las localizaciones transportables
"C" y
"POSIX". En los viejos tiempos
solía haber soporte para el código europeo ISO Latin-1,
localización
"ISO-8859-1" (e.g. en libc-4.5.21 y
libc-4.6.27), y la localización cirílica (rusa)
"KOI-8" (más precisamente, "koi-8r") (e.g. en
libc-4.6.27), de forma que tener una variable de ambiente LC_CTYPE=ISO-8859-1
ya era suficiente para que isprint() devolviera la respuesta correcta. Hoy
día los europeos (y americanos) no angloparlantes tienen que trabajar un
poquito más (N.T.: ¡qué raro! :-) y debe instalarse los
ficheros reales de localizaciones para su idioma.
VÉASE TAMBIÉN¶
locale(1),
localedef(1),
strcoll(3),
isalpha(3),
localeconv(3),
strftime(3),
charsets(4),
locale(7)