GNU gettext的Wikipedia条目显示了一个示例,其中语言环境仅是语言“ fr”。而SO中的'i18n gettext()“ hello world”示例”具有语言和国家(地区)“ es_MX
”的语言环境值。
我修改了“ es_MX
”示例,仅使用了“ es”。这包括制作“ es”而不是“'es_MX'”消息目录,并在环境变量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”不起作用。
从Zac Thompson的链接到GNU gettext实用程序,第2.3节通过环境变量设置区域设置,小节LANGUAGE变量:
在LANGUAGE环境变量中,但在其他环境变量中则没有,“ ll_CC”组合可以缩写为“ ll”,以表示该语言的主要方言。例如,在这种情况下,“ de”等同于“ de_DE”(德语,德语),“ pt”等同于“ pt_PT”(葡萄牙语,葡萄牙语)。
指出“ es”是仅LANGUAGE
但不LANG
支持的缩写。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句