http://www.gnu.org/software/libc/manual/html_node/Standard-Locales.html
決してLANG=C とLANG=en_USはイコールじゃない。仕様上は。
青本
には
「C(POSIX)ロケールが指定された場合、メッセージカタログが使用されず、
プログラムがデフォルトとしてプログラムコードに記述したメッセージ(英語)が出力されます」
」
とある。まぁ、この英語ってのがen_USだとはどこにも書いていないがね。
まどろっこしい。
つまりこうだ。
printf (catgets (catd, 1, 1, "Hello, world.\n"));
LANGがC以外の場合、その実行ファイルに紐ついた
メッセージが引数2と3で検索。
(この場合、セット1のメッセージ1番が検索される)
NLSPATH(/usr/lib/nls/msg/)にメッセージはある。
無い場合や見つからない場合、第4引数のメッセージが表示される。
LANG=Cはこの第4メッセージを強制する。
en_USの内容がHello、THE WORLD!!!!! URYYYYY!!なら
LANG=Cとは一致しない。
しかし、青本の説明の「英語」という意味ではあっている。
http://euc.jp/i18n/msgcat.ja.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/catgets.3.html
http://mstssk.blogspot.com/2009/04/whats-langc.html
http://d.hatena.ne.jp/elf/20090924/1253775215

