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)