よくきたはてダ このページをアンテナに追加 RSSフィード Twitter

2009-09-24

LANG=Cはメッセージを英語で出すのではない(と思う

Linuxコマンドの結果をパースするとき、言語を統一して取り扱いたい。

そんなときは、コマンドの先頭に「LANG=C」と書けば、コマンドの結果を英語で出力できます。

コマンドの結果を英語で出力したい!ソースコードを追ってみた - HDEラボ

#いきなり関係ないですけど↑のエントリータグの設定変じゃね?

LANG=Cはの「C」は特殊な値で、「Clear」みたいなものを指すのではないかと思います.

動作的にはいわゆるmsgidをそのまま出力,_("foo")は単純に「foo」として出すということです.

つまり,_("日本語")なメッセージカタログを持つアプリケーションは「LANG=C」で「日本語」で出力されます.

っで,英語で出すにはどーしたらええんじゃい? ということですが,正規の手続きとしては「en」にすることだと思います.

$ LANG=en df

通常enのmoファイルはほぼ用意されていないので,Cの指定もenの指定も表面上は変わって見えないと思いますけどね.

#追記

このエントリー参考になるかもですね.

コマンドを、日本語環境でなく英語環境で実行したいとき、LANG=Cと付けて実行してやったりする。

$ date

$ LANG=C date

のそれぞれの実行結果を見比べると一目瞭然。

しかし、このCってのがよくわからん。英語環境を表すのにはenというのも用意されていて、実際に

$ LANG=en date

とやると、やはり英語で表示してくれる。

1 Entry per Day: What's "LANG=C" ?

sodasoda 2009/10/09 17:48 > LANG=Cは...「Clear」みたいなものを指すのではないかと思います.

違います。
LANG=Cは確かに特殊な値ですが、意味としては「setlocale()関数を呼ばない場合と同じ動作となる最小のlocale設定」です。これはC言語の規格で定められており、『C』はClearとは関係なく、「『C』言語」の『C』です。

環境を問わないのであれば、「LANG=C だから英語とは限らない」というのも確かに正しいですが、その場合、「LANG=en に相当する locale data がインストールされているか否か」も環境依存になりますから、「LANG=en が正規の手続き」とも言い切れません。環境によっては、「LANG=en」は存在せず、「LANG=english」が英語localeを意味することもあります。
逆に Linux にデフォルトでインストールされているコマンドに話を限れば、「LANG=C で英語」でも間違いとまでは言えないでしょう。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元