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などに設定する必要があります。ドキュメントはそれをかなり明確に説明しています。