当前位置: 首页 > 面试题库 >

完整的C ++ i18n gettext()“ hello world”示例

茅炯
2023-03-14
问题内容

我正在寻找一个完整的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目录的引用。


问题答案:
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


 类似资料:
  • 这个示例用于运行测试XQuery程序执行环境是否正常工作。 执行上面示例代码,得到以下结果 - 该程序创建一个名为的临时变量,并为其分配一个字符串值。 输出是一个XML元素,包含一个包含变量值的消息元素。 也可以使用序列化选项来定义序列化和输出媒体类型,从而使XQuery返回纯文本。 例如,要将消息作为文本输出,请将序列化指定为文本,将指定为。

  • TS 配置文件路径在/etc/trafficserver/,分功能配置不同配置文件,常用的配置文件如下: records.config 主功能参数配置文件 remap.config 业务域名规则配置文件 storage.config Cache 存储配置文件 squid 配置转TS配置参考 配置示例 Storage.config ATS 支持目录配置,也支持裸盘配置,无需文件系统支持 目录配置方式

  • 本文向大家介绍C语言链表完整操作演示,包括了C语言链表完整操作演示的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C链表操作演示的具体代码,供大家参考,具体内容如下 头文件:link_0505.h 实现代码: link_0505.cpp 测试函数: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 以下完整长度示例指定YAML的构造,其中包括符号和各种表示,这些表示在以JSON格式转换或处理它们时将非常有用。 这些属性在JSON文档中也称为键名。 这些符号是出于安全目的而创建的。 上述YAML格式表示具有各种其他属性的默认值,适配器和主机的各种属性。 YAML还会记录生成的每个文件,这些文件会保留生成的错误消息的跟踪。 在以JSON格式转换指定的YAML文件时,得到所需的输出,如下所述 -

  • 本文向大家介绍Django 一个完整的hello world示例。,包括了Django 一个完整的hello world示例。的使用技巧和注意事项,需要的朋友参考一下 示例 步骤1如果您已经安装了Django,则可以跳过此步骤。 步骤2建立新专案 这将创建一个名为的文件夹hello,其中将包含以下文件: 步骤3在hello模块内部(包含的文件夹__init.py__)创建一个名为的文件views.

  • 我在struts2中使用jqgrid插件。我能够在浏览器中看到JSON数据,但不确定如何在网格中显示该数据(使用grid.jsp)。 以下是我正在使用的文件: 支柱。xml 网状物xml http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd“id=“WebApp\u id”版本=“3.0” JSONDataAction.java 用户ction.jav