web-dev-qa-db-ja.com

ロケール:LANGUAGE変数は何に使用されますか? (そしていつ?)

Linuxで使用されているロケールを理解しようとしています。私のUbuntu11.10システムでは、localeは次のように出力します。

LANG=en_DK.UTF-8
LANGUAGE=en_GB:en
LC_CTYPE=en_GB.UTF-8
LC_NUMERIC="en_DK.UTF-8"
LC_TIME="en_DK.UTF-8"
LC_COLLATE=en_GB.UTF-8
LC_MONETARY="en_DK.UTF-8"
LC_MESSAGES=en_GB.UTF-8
LC_PAPER="en_DK.UTF-8"
LC_NAME="en_DK.UTF-8"
LC_ADDRESS="en_DK.UTF-8"
LC_TELEPHONE="en_DK.UTF-8"
LC_MEASUREMENT="en_DK.UTF-8"
LC_IDENTIFICATION="en_DK.UTF-8"
LC_ALL=

en_dkは、国際日形式、大陸ヨーロッパ番号形式(1.234,56)などを使用するためのものです。)

LC_*ファミリーの機能、LANGが設定されていない場合のフォールバック、LC_ALLがすべてのLC_*変数をその値に設定することを理解していると思います。

私がまだ知らないのは、LANGUAGEが何に使用されるかです。 en_GB:enという表記は、Accept-LanguageHTTPヘッダーを思い出させます。上記の設定では、翻訳が存在する場合はイギリス英語が使用されます。それ以外の場合は、既存の英語の翻訳(en_US、en_AU、...など)が使用されます。

私は今のところ正しいですか?

また、どのプログラムが実際にLANGUAGE設定に従いますか? LC_MESSAGESとどのくらい違うのですか?

残念ながら、man localeLC_*ファミリのみを文書化します。また、Webで「linuxlocaleLANGUAGE」などを検索するのは無言です。 (もちろん、言語はロケールについて話すときによく使用される単語であり、説明せずにlocaleの出力に表示される場合もあります)。

誰かが私を助けてくれますか?

6
seya

$LC_ALLgettextメッセージカタログに関して で指定されたロケールにオーバーライドします。それ以外の場合は使用されません。