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-Language
HTTPヘッダーを思い出させます。上記の設定では、翻訳が存在する場合はイギリス英語が使用されます。それ以外の場合は、既存の英語の翻訳(en_US、en_AU、...など)が使用されます。
私は今のところ正しいですか?
また、どのプログラムが実際にLANGUAGE
設定に従いますか? LC_MESSAGES
とどのくらい違うのですか?
残念ながら、man locale
はLC_*
ファミリのみを文書化します。また、Webで「linuxlocaleLANGUAGE」などを検索するのは無言です。 (もちろん、言語はロケールについて話すときによく使用される単語であり、説明せずにlocale
の出力に表示される場合もあります)。
誰かが私を助けてくれますか?
$LC_ALL
gettextメッセージカタログに関して で指定されたロケールにオーバーライドします。それ以外の場合は使用されません。