2011-11-20 49 views
0

2.0 + MinGW32 + Windows平台+ Netbeans IDE创建我的应用程序。我已经创建了前端,但现在我需要添加语言选择选项,我希望自动翻译,并且我对GTK很感兴趣,所以我需要详细的帮助。我在谷歌搜索,但我没有找到任何帮助,因此请尽快帮助:(#) 我设计了我的布局使用gtkBuilder。它做...GTK + - 2.0 GUI和代码本地化指南

请凸显如何在Windows中使用gettext()or_(),什么是.po文件以及如何处理他们...

**对不起,我英文不好...

回答

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 

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

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() "hello world" example

+0

那么,“sed”步骤通常是无用的,翻译通常使用外部工具(如poedit)或手动编辑.po文件来完成。 hellogt.cxx中的gettext调用也被对_ _()宏的调用所取代,后者隐藏它(然后将--keyword = _选项传递给xgettext以识别标记为翻译的字符串)。 _T()用于不应该被翻译的字符串。 – liberforce

0

嗯,这取决于你使用哪个Makefile生成器。我不认为你使用autotools,所以你可能需要实现你自己的逻辑。

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

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

不幸的是,这一切都与你的构建系统有关,所以没有一个单独的方式来做到这一点。我使用CMake,但是你可以使用shell脚本或任何能够调用命令并生成文件的系统。

希望这会有所帮助。

+0

告诉我你想知道的帮我在正确的方向是什么? –

+0

你可以使用bash来做到这一点,或禁止添加bash依赖项吗? – liberforce

+0

是的,我不能使用bash脚本:( –