GTK+ - 2.0 GUI 和代码本地化指南

发布于 2024-12-17 06:44:25 字数 297 浏览 0 评论 0原文

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

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

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

** 抱歉英语不好。 ..

2.0 + MinGW32 + Windows platform + Netbeans IDE to create my application. i have created the front-end but now i need to add language selection option and i want auto translation and i m new to GTK so i want detailed help. i searched on google but i didn't found any help for doing it on windows so please help as soon as possible :(
I have designed my layout using gtkBuilder.

I want to know the exact steps to follow to get it done...

Please highlight how to use gettext() or_() in windows and what are .po files and how to handle them...

** Sorry for bad English...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神爱温柔 2024-12-24 06:44:25

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

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

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

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

希望这有帮助。

Well, it depends on which Makefile generator you use. I don't think you're using autotools for that, so you may need to implement your own logic for that.

I did that on Windows/MinGW with CMake. The workflow you need to follow to produce your .po files is in the GNU gettext overview. Basically, xgettext parses your code to extract the strings you want to translate. You can pass it a keyword, generally "_" which identifies the _() macro used in your code to mark strings for translation. It will generate the .pot (PO template) files. You can then copy that file and rename it into a .po file, and translate the strings with tools like poedit.

The, you needs some mechanisms to update your po files. This uses msgmerge, that will merge your new .pot files with the existing .po files. It will add the new strings to translate, and comment out the strings that disappeared.

Unfortunately, this is all tied to your build system, so there'not one sigle way to do it. I used CMake, but you can use shell scripts or any system able to call a command and generate files.

Hope this helps.

音盲 2024-12-24 06:44:25
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

来源: Complete C++ i18n gettext ()“你好世界”示例

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文