gettext:如何回归基础语言?

时间:2012-12-05 13:20:04

标签: internationalization wxwidgets gettext

我打算使用wxWidgets重写我们的应用程序。也正因为如此,我想使用gettext方式使用人类语言。我们目前使用其中四种:捷克语,斯洛伐克语,英语和德语。具体语言并不重要。

重要的是,捷克语和英语被认为是一种基础语言。这意味着如果使用切换到德语,并且没有在那里定义文本,他或她会自动获取英文文本(这里没有gettext问题)。但是,当用户使用斯洛伐克语时,后备语言是捷克语。当用户使用英语时,它甚至可以回归到捷克语(开发人员会出现一种错误,因为英语也应该完整)。

我知道gettext使用一种语言作为默认语言 - 直接在源代码中编写。其他语言以.mo文件的形式提供。是gettext和wxWidgets的新手......

有没有办法将回退实现为另一种与默认语言不同的显式语言(即源文件)?换句话说,可以在内存中存在更多语言并动态切换吗?

感谢您的时间和经验,

彼得

2 个答案:

答案 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),然后用真正的斯洛伐克语翻译替换其中一些。当然,对于德语,如果你在你的来源中使用英语,它应该自动工作(即使你的母语是捷克语,我强烈建议你这样做。)