2011-02-04 12 views
5

Questo è praticamente This question con un po 'più di informazioni. Il mio obiettivo è di elaborare le lingue installate nel sistema.Come ottenere il nome della lingua per una determinata localizzazione in linux

Il comando seguente

locale -a 

mostra tutte le lingue (in un formato come en_AU.utf8). Questo sembra corrispondere al contenuto di/usr/lib/locale.

Inoltre, invocando

LANG=fr_FR.utf8 locale -ck LC_IDENTIFICATION 

Fornisce informazioni di quel locale in particolare che include il nome della lingua (che in questo caso è il francese).

Questa sembra essere l'informazione contenuta in /usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATION.

C'è un modo (forse una chiamata API) per ottenere queste informazioni? Ho guardato la fonte dell'utilità locale ma utilizza una struttura privata.

+0

Non è necessario per ottenere manualmente la variabile d'ambiente 'lang' -' setlocale (LC_ALL, ""); 'imposterà il locale in base alle impostazioni di ambiente. – caf

+0

Dovresti invertire e accettare la soluzione di Yasir, non copiarla nella domanda. La domanda dovrebbe rimanere solo una domanda. – tripleee

+1

@ tripleee Grazie. Domanda aggiustata e risposta aggiunta. – Dushara

risposta

0

Grazie a Yasir. Questo è esattamente quello che volevo:

#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

Se qualcuno sta cercando il codice della lingua, può essere recuperato utilizzando _NL_ADDRESS_LANG_AB. E il codice Paese può essere recuperato utilizzando _NL_ADDRESS_COUNTRY_AB2. –

1

Penso che si possano semplicemente ottenere variabili di ambiente, usando, ad esempio, getenv(3), quindi si vorrebbe passargli il nome della variabile, e. g .:

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

Va bene, ma voglio sapere quali sono i contenuti di LANG. Ad esempio, se LANG = fr_FR.utf, come faccio a capire che la lingua rappresentata è "francese"? – Dushara

+2

Penso che potresti provare solo se le impostazioni locali hanno il valore 'fr_FR' nel suo nome; dopo tutto, sai che è una scorciatoia per il francese. L'altra funzione, che potrebbe essere utile è ['nl_langinfo (3)'] (http://linux.die.net/man/3/nl_langinfo). –

+0

Hmm nl_langinfo sembra promettente. Lo darò un'occhiata. – Dushara

Problemi correlati