LOCALE(7)

NOMBRE
locale - Descripción del soporte para múltiples idiomas

RESUMEN
#include <locale.h>

DESCRIPCIÓN
Una localidad (locale) es un conjunto de reglas culturales e idiomáticas que abarcan aspectos tales como el idioma usado para mensajes, diferentes juegos de caracteres, convenciones lexicográficas, etc. Un programa debe poder determinar su localidad y actuar apropiadamente para poder ser portado a diferentes culturas.

El fichero de cabecera <locale.h> declara los tipos de datos, funciones y macros utilizados en esta tarea.

El archivo de cabecera declara las funciones setlocale() para establecer la localidad actual, y localeconv() para obtener información acerca del formato numérico.

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() es posible modificar uno de los siguientes atributos para que usen la localidad adecuada:

LC_COLLATE
    Usado para cambiar el comportamiento de las funciones strcoll() y strxfrm(), que comparan cadenas de caracteres usando el alfabeto local. Por ejemplo, el caracter Alemán 'sharp s' se alfabetiza como "ss".

L_CTYPE
    Modifica el comportamiento de las funciones que manipulan y clasifican caracteres, tales como isupper() y toupper(), y las funciones de caracteres multibyte como mblen() o wctomb().

LC_MONETARY
    Modifica la información devuelta por localeconv() que describe el formato en que los números deben ser impresos, incluyendo detalles tales como el uso del punto decimal.

LC_MESSAGES
    Cambia el idioma en el que se muestran los mensajes.

LC_TIME
    Modifica el comportamiento de la función strftime() para mostrar la hora actual usando el formato local apropiado; por ejemplo, en casi todo Europa se usa el reloj de 24 horas mientras que en Estados Unidos se usa el reloj de 12 horas.

LC_ALL
    Todos los anteriores.

Si el segundo argumento a la función setlocale() es una cadena vacía, "", se usa la localidad por defecto. Esta localidad se determina de la siguiente forma:

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 obtaner información sobre el formato numérico local usando la estructura struct lconv devuelta por la función localeconv(). Dicha estructura tiene la siguiente declaración:

struct lconv
{
  /* Información numérica no monetaria. */
  char *decimal_point;		/* Caracter usado como punto decimal. */
  char *thousands_sep;		/* Separador de miles. */
  /* Cada elemento indica el número de dígitos en cada grupo;
     elementos con índices altos están hacia la izquierda.
     Un elemento con valor CHAR_MAX indica que a partir de esa
     posición no se deben agrupar mas dígitos.
     Un elemento con valor 0 indica que se debe usar el elemento
     anterior para todos los grupos hacia la izquierda. */
  char *grouping;
  /* Información monetaria. */
  /* Los primeros tres caracteres son el símbolo monetario según
     ISO 4217. El cuarto caracter es el separado. El quinto
     caracter es ' '. */
  char *int_curr_symbol;
  char *currency_symbol;   	/* Símbolo monetario local. */
  char *mon_decimal_point;	/* Caracter usado como punto decimal. */
  char *mon_thousands_sep;	/* Separador de miles.  */
  char *mon_grouping;		/* Igual que el campo `grouping'(arriba) */
  char *positive_sign;		/* Signo para valores positivos. */
  char *negative_sign;		/* Signo para valores negativos. */
  char int_frac_digits;		/* Dígitos fraccionales internacionales. */
  char frac_digits;    		/* Dígitos fraccionales locales. */
  char p_cs_precedes;     	/* 1 si el símbolo monetario precede a un
                                   valor positivo, 0 si lo sucede. */
  char p_sep_by_space;    	/* 1 si un espacio separa el símbolo
                                   monetario de un valor positivo. */
  char n_cs_precedes;     	/* 1 si el símbolo monetario precede a
                                   un valor negativo, 0 si lo sucede. */
  char n_sep_by_space;    	/* 1 si un espacio separa el símbolo
                                   monetario de un valor negativo. */
  /* Posiciones de los signos positivo y negativo:
     0 Paréntesis rodean la cantidad y el símbolo monetario.
     1 El signo precede a la cantidad y al símbolo monetario.
     2 El signo sucede a la cantidad y al símbolo monetario.
     3 El signo precede en forma inmediata al símbolo monetario.
     4 El signo sucede en forma inmediata al símbolo monetario. */
  char p_sign_posn;
  char n_sign_posn;
};

CONFORMA CON
POSIX.1

Por el momento, las únicas localidades soportadas por Linux son "C" , "POSIX" (idéntica a la localidad "C"), "ISO-8859-1" (europea latin-1) y "KOI-8" (rusa).

VÉASE TAMBIÉN
setlocale(3), localeconf(3), locale(1), localedef(1)