GNU/Linux >> Linux の 問題 >  >> Linux

Linux –ロケールEs_mxは機能するがEsは機能しないのはなぜですか?

GNU gettextのウィキペディアエントリは、ロケールが単なる言語「fr」である例を示しています。 SOの「i18ngettext()「helloworld」の例」には、言語と国の両方のロケール値がありますが、「es_MX 「。

es_MX」を変更しました 」の例では、言語「es」のみを使用します。これには、「es_MX」ではなく「es」メッセージカタログの作成と、環境変数LANGを「es」に設定したプログラムの呼び出しが含まれます。ただし、これにより、予想されるスペイン語ではなく英語のテキストが生成されます。

cat >hellogt.cxx <<EOF
// hellogt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
int main (){
    setlocale(LC_ALL, "");
    bindtextdomain("hellogt", ".");
    textdomain( "hellogt");
    std::cout << gettext("hello, world!") << std::endl;
}
EOF
g++ -ohellogt hellogt.cxx
xgettext -d hellogt -o hellogt.pot hellogt.cxx
msginit --no-translator -l es -o hellogt_spanish.po -i hellogt.pot
sed --in-place hellogt_spanish.po --expression='/#: /,$ s/""/"hola mundo"/'
sed --in-place hellogt_spanish.po --expression='s/PACKAGE VERSION/hellogt 1.0/'
mkdir -p ./es.utf8/LC_MESSAGES
msgfmt -c -v -o ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po
LANG=es.utf8 ./hellogt

環境変数を使用したロケールの制御によると:

環境変数LANGUAGEは、
GNU gettextによってのみ使用されます…
定義されている場合、
LANGUAGEは、LC_ALL、LC_MESSAGES、およびLANGよりも
優先されます。

LANGUAGE=es.utf8 ./hellogt

英語ではなく、予想されるスペイン語のテキストを生成します。

しかし、これは「LANG=es」が機能しない理由を説明していません。

承認された回答:

ウィキペディアは、おそらくこのようなものの最良のリファレンスではありません。通常、広く適用できない可能性のある非常に単純な例があり、実際的な考慮事項よりも概念を理解するために構築されています。

gnu独自のドキュメントを使用してみませんか?

http://www.gnu.org/software/gettext/manual/gettext.html#Setting-the-POSIX-Locale

LANGUAGEを「es」(または優先順位リストの場合は「es:fr:en」)に設定できますが、それでもLANGをes_MXなどに設定する必要があります。ドキュメントはそれをかなり明確に説明しています。


Linux
  1. 正規表現がXで機能するのに、Yでは機能しないのはなぜですか?

  2. Linux Setuidが機能しませんか?

  3. ファイルが存在する場合にforループの`zip`が機能するのに、存在しない場合は機能しないのはなぜですか?

  1. なぜ`exit&`が機能しないのですか?

  2. Linux – Linux上のRsyncがすべてのタイムスタンプ(作成時間)を保持しないのはなぜですか?

  3. find -exec mv {} ./target/ + が機能しないのはなぜですか?

  1. Linux –なぜSuだけでなくSuを使用するのですか?

  2. Windows が Linux パーティション内のファイルを認識しないのはなぜですか?

  3. この正規表現が Linux で機能しないのはなぜですか?