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

Localization GTK+;-GUI和代码的2.0本地化指南,localization,gtk,glib,mingw32,Localization,Gtk,Glib,Mingw32,2.0+MinGW32+Windows平台+Netbeans IDE创建我的应用程序。我已经创建了前端,但现在我需要添加语言选择选项,我需要自动翻译,我是GTK新手,所以我需要详细的帮助。我在谷歌上搜索过,但在windows上没有找到任何帮助,因此请尽快提供帮助:( 我已经使用gtkBuilder设计了我的布局 我想知道完成这件事的具体步骤 请突出说明如何在windows中使用gettext()或_U4;()以及.po文件是什么以及如何处理它们 **抱歉,英语不好…好吧,这取决于您使用的Make

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

我想知道完成这件事的具体步骤

请突出说明如何在windows中使用gettext()或_U4;()以及.po文件是什么以及如何处理它们


**抱歉,英语不好…

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

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

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

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

希望这有帮助

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

来源:

你能用bash来做这件事吗,或者添加bash依赖项是被禁止的?是的,我不能用bash脚本:(那么我想你必须从.bat脚本调用xgettext、msgmerge、msgfmt……最后我通过一个非常好的教程thnx:)完成了这一切@瓦卡尔·阿里·汗(Waqar Ali Khan),看看这似乎就是答案,你为什么不做一个朋友并接受它呢?;)好吧,“sed”步骤基本上是无用的,翻译通常是使用外部工具完成的,比如poedit,或者通过手动编辑.po文件。hellogt.cxx中的gettext调用也被对z()宏的调用所取代,后者将其隐藏(然后将--keyword=\选项传递给xgettext以识别标记为翻译的字符串)。\u T()用于不应翻译的字符串。
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