程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了完整的C ++ i18n gettext()“ hello world”示例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决完整的C ++ i18n gettext()“ Hello world”示例?

开发过程中遇到完整的C ++ i18n gettext()“ Hello world”示例的问题如何解决?下面主要结合日常开发的经验,给出你关于完整的C ++ i18n gettext()“ Hello world”示例的解决方法建议,希望对你解决完整的C ++ i18n gettext()“ Hello world”示例有所启发或帮助;
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_MX --output-file Hellogt_spanish.po --input Hellogt.pot
sed --in-place Hellogt_spanish.po --Expression='/"Hello, world!"/,/#: / s/""/"hola mundo"/'
mkdir --parents ./es_MX.utf8/LC_messaGES
msgfmt --check --verbose --output-file ./es_MX.utf8/LC_messaGES/Hellogt.mo Hellogt_spanish.po
LANGUAGE=es_MX.utf8 ./Hellogt

这是上面创建的文件的描述:

Hellogt.cxx         C++ source file
Hellogt             Executable image
Hellogt.pot         Extracted text from C++ source file (portable object templatE)
Hellogt_spanish.po  ModifIEd text for Spanish with translations added (using sed)
es_MX.utf8/
 LC_messaGES/
   Hellogt.mo       Binary translated text for Spanish used at run-time

解决方法

我正在寻找一个完整的i18n gettext()Hello世界示例。我已经基于G. Mohanty 编写的使用GNU
gettext的本机语言支持教程编写了一个脚本。我正在使用Linux和G
++。

码:

cat >Hellogt.cxx <<EOF
// Hellogt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
#include <cstdlib>
int main (){
    char* cwd = getenv("PWD");
    std::cout << "getenv(PWD): " << (cwd?cwd:"NULL") << std::endl;
    char* l = getenv("LANG");
    std::cout << "getenv(LANG): " << (l?l:"NULL") << std::endl;
    char* s = setlocale(LC_ALL,"");
    std::cout << "setlocale(): " << (s?s:"NULL") << std::endl;
    std::cout << "bindtextdomain(): " << bindtextdomain("Hellogt",cwd) << std::endl;
    std::cout << "textdomain(): " << textdomain( "Hellogt") << std::endl;
    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_MX -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_MX/LC_messaGES
msgfmt -c -v -o ./es_MX/LC_messaGES/Hellogt.mo Hellogt_spanish.po
export LANG=es_MX
ls -l $PWD/es_MX/LC_messaGES/Hellogt.mo
./Hellogt
strace -e trace=open ./Hellogt

程序进行编译,提取文本,创建,修改和创建西班牙语文件,但是Hellogt仍显示英语。跟踪没有显示在当前工作目录中查找es_MX的证据,也没有任何对LC_messaGES目录的引用。

大佬总结

以上是大佬教程为你收集整理的完整的C ++ i18n gettext()“ hello world”示例全部内容,希望文章能够帮你解决完整的C ++ i18n gettext()“ hello world”示例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。