1

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

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

我知道 gettext 默认使用一种语言——直接写在源代码中。其他语言以 .mo 文件的形式提供。刚接触 gettext 和 wxWidgets...

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

感谢您的时间和经验,

彼得

4

2 回答 2

2

不,你不能有选择地提供这样的后备。OTOH 绝对没有什么能阻止您将捷克语翻译复制到斯洛伐克语(即cp cz.po sk.po),然后只用真正的斯洛伐克语翻译替换其中的一些。而且,当然,对于德语,如果您在资源中使用英语,它应该会自动工作(即使您的母语是捷克语,我强烈建议您这样做)。

于 2012-12-05T23:53:48.097 回答
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;
}
于 2012-12-05T13:49:06.363 回答