我打算使用wxWidgets重写我们的应用程序。也正因为如此,我想使用gettext
方式使用人类语言。我们目前使用其中四种:捷克语,斯洛伐克语,英语和德语。具体语言并不重要。
重要的是,捷克语和英语被认为是一种基础语言。这意味着如果使用切换到德语,并且没有在那里定义文本,他或她会自动获取英文文本(这里没有gettext问题)。但是,当用户使用斯洛伐克语时,后备语言是捷克语。当用户使用英语时,它甚至可以回归到捷克语(开发人员会出现一种错误,因为英语也应该完整)。
我知道gettext使用一种语言作为默认语言 - 直接在源代码中编写。其他语言以.mo文件的形式提供。是gettext和wxWidgets的新手......
有没有办法将回退实现为另一种与默认语言不同的显式语言(即源文件)?换句话说,可以在内存中存在更多语言并动态切换吗?
感谢您的时间和经验,
彼得
答案 0 :(得分:1)
您的应用将显示的语言由wxLocale(http://docs.wxwidgets.org/trunk/classwx_locale.html)
控制当您的应用程序启动时,您可以通过调用Init(wxLANGUAGE_DEFAULT)http://docs.wxwidgets.org/trunk/classwx_locale.html#a37c254f20d4862b6efea2fedf63a231a
将语言设置为系统默认值您可以通过调用GetLanguage()http://docs.wxwidgets.org/trunk/classwx_locale.html#a6516d2529c936e441d7d23c42dc3e1b4
找出已加载的语言如果返回的语言不是您支持的语言之一,则可以将其更改为您要用作该特定语言的后备的任何语言。例如,如果GetLanguage告诉您使用了德语,那么您的代码可以将其设置为英语,但如果斯洛伐克语然后回退到捷克语等等,您可以根据需要定义多个对。
// set languagew to system default
myLocale = new wxLocale;
myLocale->Init();
// find language being used and choose fallback if required
switch( myLocale->GetLanguage() ) {
case wxLANGUAGE_ENGLISH: case wxLANGUAGE_CZECH: ...
// a language we support, nothing more needed
break;
case wxLANGUAGE_SLOVAK: ...
// a language that falls back to czech
myLocale->Init( wxLANGUAGE_CZECH ); break;
case wxLANGUAGE_GERMAN: ...
// a language that falls back to english
myLocale->Init( wxLANGUAGE_ENGLISH ); break;
default:
// a language we dont support and have not specified a fall back for
// for now, let's go with english
myLocale->Init( wxLANGUAGE_ENGLISH ); break;
}
答案 1 :(得分:1)
不,你不能有选择地提供这样的后备。 OTOH绝对没有什么可以阻止你将捷克语翻译复制到斯洛伐克语翻译(即cp cz.po sk.po
),然后用真正的斯洛伐克语翻译替换其中一些。当然,对于德语,如果你在你的来源中使用英语,它应该自动工作(即使你的母语是捷克语,我强烈建议你这样做。)