gpt4 book ai didi

c++ - 为什么语言环境 es_MX 有效但 es 无效?

转载 作者:太空狗 更新时间:2023-10-29 12:08:25 25 4
gpt4 key购买 nike

Wikipedia entry for GNU gettext显示了一个示例,其中语言环境只是语言“fr”。而 i18n gettext() “hello world” example具有包含语言和国家/地区的区域设置值“es_MX”。我已将“es_MX”示例修改为仅使用语言“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++ -o hellogt hellogt.cxx
xgettext --package-name hellogt --package-version 1.2 --default-domain hellogt --output hellogt.pot hellogt.cxx
msginit --no-translator --locale es --output-file hellogt_spanish.po --input hellogt.pot
sed --in-place hellogt_spanish.po --expression='/"hello, world!"/,/#: / s/""/"hola mundo"/'
mkdir --parents ./es.utf8/LC_MESSAGES
msgfmt --check --verbose --output-file ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po
LANG=es.utf8 ./hellogt

根据 Controlling your locale with environment variables :

environment variable, LANGUAGE, which is used only by GNU gettext ... If defined, LANGUAGE takes precedence over LC_ALL, LC_MESSAGES, and LANG.

LANGUAGE=es.utf8 ./hellogt

生成预期的西类牙语文本而不是英语。

但这并不能解释为什么“LANG=es”不起作用。

最佳答案

嗯……听起来像是平台问题。我在 Mac OSX 下做了完全相同的事情并得到了预期的结果。我怀疑您的 linux 版本不喜欢 LANG=es.utf8。检查有关 setlocale(3)xlocale(3) 等内容的本地系统文档,如果后者受支持的话。

IIRC,仅包含主要标识符的区域设置标识符是 ISO-639 语言代码,附加了主要发言国家/地区的 ISO-3166 国家/地区代码。然后通过在 /usr/share/locale 中查找来执行生成的区域设置查找。我查看了 MacBook 上的语言环境目录,有一个名为 eses_ES 的目录。这可能是一个简单的系统配置问题。

我强烈推荐使用 ICU如果您正在开发商业应用程序,而不是标准库提供的 gettext 和语言环境的东西。 Gettext 可用于简单的消息查找,但它几乎不能提供您真正需要的东西来真正实现完全国际化的应用程序。

关于c++ - 为什么语言环境 es_MX 有效但 es 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1079568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com