0

2.0 + MinGW32 + Windows 平台 + Netbeans IDE 来创建我的应用程序。我已经创建了前端,但现在我需要添加语言选择选项,我想要自动翻译并且我是 GTK 的新手,所以我想要详细的帮助。我在谷歌上搜索,但我没有在 Windows 上找到任何帮助,所以请尽快提供帮助:(我使用 gtkBuilder 设计了我的布局。

我想知道完成它要遵循的确切步骤......

请强调如何在 Windows 中使用 gettext() 或_() 以及什么是 .po 文件以及如何处理它们...

**抱歉英语不好...

4

2 回答 2

0
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

Here is a description of the files created by the above:

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

SOURCE: Complete C++ i18n gettext() "hello world" example

于 2011-11-24T01:28:25.423 回答
0

好吧,这取决于您使用的 Makefile 生成器。我认为您没有为此使用自动工具,因此您可能需要为此实现自己的逻辑。

我用 CMake 在 Windows/MinGW 上做到了这一点。生成 .po 文件所需遵循的工作流程在 GNU gettext 概述中。基本上,xgettext 会解析您的代码以提取您要翻译的字符串。您可以向它传递一个关键字,通常是“_”,它标识代码中用于标记要翻译的字符串的 _() 宏。它将生成 .pot(PO 模板)文件。然后,您可以复制该文件并将其重命名为 .po 文件,并使用 poedit 等工具翻译字符串。

你需要一些机制来更新你的 po 文件。这使用 msgmerge,它将新的 .pot 文件与现有的 .po 文件合并。它将添加要翻译的新字符串,并注释掉消失的字符串。

不幸的是,这一切都与您的构建系统相关,因此没有一种单一的方法可以做到这一点。我使用了 CMake,但您可以使用 shell 脚本或任何能够调用命令并生成文件的系统。

希望这可以帮助。

于 2011-11-21T11:41:08.777 回答