2011-02-04 17 views
5

これはもう少しの情報があるThis questionです。私の目標は、システムにインストールされている言語を調べることです。Linuxで指定されたロケールの言語名を取得する方法

次のコマンド

locale -a 

ディスプレイすべての言語(例えばen_AU.utf8などの形式で)。これは/ usr/lib/localeの内容に対応しているようです。

LANG=fr_FR.utf8 locale -ck LC_IDENTIFICATION 

呼び出すさらに

は、(この場合はフランス語である)言語名が含まれ、その特定のロケールの情報を与えます。

これは、/usr/lib/locale/fr_FR.utf8/LC_IDENTIFICATIONに含まれる情報のようです。

この情報を取得するための手段(多分API呼び出し)はありますか?私はロケールユーティリティのソースを調べましたが、private構造体を使用しています。

+0

環境変数 'LANG'を手動で取得する必要はありません - setlocale(LC_ALL、" ");'は環境設定に基づいてロケールを設定します。 – caf

+0

Yasirの解決策をupvoteして受け入れるべきです。質問にそれをコピーしないでください。問題は依然として問題に残ります。 – tripleee

+1

@ tripleeeありがとうございました。調整された質問と追加された答え。 – Dushara

答えて

0

Yasirに感謝します。

#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

誰かが言語コードを探している場合は、_NL_ADDRESS_LANG_ABを使用して取得できます。国コードは_NL_ADDRESS_COUNTRY_AB2を使用して取得できます。 –

1

私は、例えばgetenv(3)などを使用して環境変数を取得できると思います。したがって、変数eの名前を渡すことをお勧めします。 g:

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

それは問題ありませんが、私はLANGの内容が何であるかを知りたいです。たとえば、LANG = fr_FR.utfの場合、表現された言語が「フランス語」であることをどのようにして解決できますか? – Dushara

+2

ロケールの名前に 'fr_FR'という値があるかどうかをテストできます。結局のところ、それはフランス語のためのショートカットです。有用な他の関数は['nl_langinfo(3)'](http://linux.die.net/man/3/nl_langinfo)です。 –

+0

Hmmのnl_langinfoは有望です。私はそれを見てみましょう。 – Dushara

関連する問題