![ロケール: LANGUAGE 変数は何の目的で使用されますか? (いつ使用されますか?)](https://rvso.com/image/1311332/%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%AB%3A%20LANGUAGE%20%E5%A4%89%E6%95%B0%E3%81%AF%E4%BD%95%E3%81%AE%E7%9B%AE%E7%9A%84%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8B%3F%20(%E3%81%84%E3%81%A4%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8B%3F).png)
Linux で使用されるロケールを理解しようとしています。私の Ubuntu 11.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
そのうちの 1 つが設定されていない場合のフォールバックであり、LC_ALL はすべてのLC_*
変数をその値に設定します。
まだ分からないのは、LANGUAGE
の用途です。この表記はHTTP ヘッダーen_GB:en
を思い出させますAccept-Language
。上記の設定では、翻訳が存在する場合はイギリス英語が使用されることを意味します。存在しない場合は、既存の英語の翻訳 (en_US、en_AU、... など) が使用されます。
ここまでのところは正しいでしょうか?
また、実際に設定に従うプログラムはどれですかLANGUAGE
? どの程度異なりますかLC_MESSAGES
?
残念ながら、man locale
ドキュメントはファミリーのみです。また、Web で「linux locale LANGUAGE」などを検索しても意味がありません。(もちろん、language はロケールについて話すときによく使用される単語であり、説明されることなくLC_*
の出力に表示されることもあります)。locale
どなたか私を助けてくれる方はいらっしゃいますか?
答え1
これは、指定されたロケールに上書きされます。$LC_ALL
gettextメッセージカタログに関してそれ以外の場合は使用されません。