2011-02-04 16 views
5

Esto es más o menos This question con un poco más de información. Mi objetivo es resolver los idiomas instalados en el sistema.Cómo obtener el nombre del idioma para una localidad determinada en Linux

El siguiente comando

locale -a 

muestra todos los idiomas (en un formato como en_AU.utf8). Esto parece corresponder al contenido de/usr/lib/locale.

Además, invocando

LANG=fr_FR.utf8 locale -ck LC_IDENTIFICATION 

Proporciona información de ese lugar en particular que incluye el nombre del idioma (que en este caso es el francés).

Esta parece ser la información contenida en /usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATION.

¿Hay alguna manera (tal vez una llamada API) para obtener esta información? Miré la fuente de la utilidad de configuración regional pero usa una estructura privada.

+0

No es necesario para obtener manualmente la variable de entorno 'LANG' -' setlocale (LC_ALL, ""); 'va a establecer la configuración regional basado en la configuración del entorno. – caf

+0

Debe votar y aceptar la solución de Yasir, no copiarla a la pregunta. La pregunta debe seguir siendo solo una pregunta. – tripleee

+1

@tripleee Gracias. Pregunta ajustada y respuesta agregada. – Dushara

Respuesta

0

Gracias a Yasir. Esto es exactamente lo que quería:

#include <langinfo.h> 

char *s; 
s = getenv("LANG"); 
if (s == NULL) 
    printf("LANG is not set"); 
else { 
    setlocale(LC_ALL, s); 
    printf(nl_langinfo(_NL_IDENTIFICATION_LANGUAGE)); 
} 
+0

Si alguien está buscando el código de idioma, puede recuperarlo usando _NL_ADDRESS_LANG_AB. Y el código de país se puede recuperar usando _NL_ADDRESS_COUNTRY_AB2. –

1

Creo que puede obtener variables de entorno, usando, por ejemplo, getenv(3), por lo que le gustaría pasarle el nombre de variable, e. g .:

char *s; 
s = getenv("LANG"); 
if (s == NULL) 
    printf("LANG is not set"); 
else 
    printf(s); 
+0

Eso está bien, pero quiero saber qué representan los contenidos de LANG. Por ejemplo, si LANG = fr_FR.utf, ¿cómo puedo deducir que el idioma representado es "francés"? – Dushara

+2

Creo que podrías probar si locale tiene el valor 'fr_FR' en su nombre; después de todo, sabes que es un atajo para francés. La otra función, que podría ser útil es ['nl_langinfo (3)'] (http://linux.die.net/man/3/nl_langinfo). –

+0

Hmm nl_langinfo parece prometedor. Echaré un vistazo a eso. – Dushara

Cuestiones relacionadas