Internationalization gettext:如何回到基础语言?

Internationalization gettext:如何回到基础语言?,internationalization,wxwidgets,gettext,Internationalization,Wxwidgets,Gettext,我计划使用wxWidgets重写我们的应用程序。也正因为如此,我想使用人类语言的gettext方式。我们目前使用四种语言:捷克语、斯洛伐克语、英语和德语。具体的语言并不那么重要 重要的是,捷克语和英语被认为是一种基础语言。这意味着,如果使用切换到德语,并且文本没有在那里定义,他或她将自动获取英语文本(这里的gettext没有问题)。但是,当用户使用斯洛伐克语时,回退语言为捷克语。当用户使用英语时,甚至可以使用捷克语(这是开发人员的一种错误,因为英语也应该是完整的) 我知道gettext使用一种语

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

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

我知道gettext使用一种语言作为默认语言——直接在源代码中编写。其他语言作为.mo文件提供。对于gettext和wxWidgets来说是新手

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

谢谢你的时间和经验


Petr

应用程序将显示的语言由wxLocale()控制

当应用程序启动时,可以通过调用Init(wxLANGUAGE_default)将语言设置为系统默认值

您可以通过调用GetLanguage()找到加载的语言

如果返回的语言不是您支持的语言之一,那么您可以将其更改为您想要用作该特定语言的备用语言的任何语言。例如,如果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;
}

不,您不能有选择地提供此类回退。OTOH绝对不会阻止您将捷克语翻译复制到斯洛伐克语(即
cp cz.po sk.po
),然后用真正的斯洛伐克语翻译替换其中的一部分。当然,对于德语来说,如果你在你的资料中使用英语,它会自动工作(即使你的母语是捷克语,我也强烈建议你这样做)。

是的,我从wxBook 444页就知道了。当重新构建GUI或至少再次设置所有文本时,我可以通过用户干预(比如选择菜单项)切换语言。问题是我是否能为一个丢失的字符串做这件事。但是谢谢你提供的信息+1谢谢。这是有道理的。那么,我不应该深入研究WX翻译吗?当设置了另一种语言时,该语言是否完全关闭了内存?我想你可以通过“深入研究”来做你想做的事情,但我真的不确定我是否建议这样做,这肯定会增加复杂性,从而获得非常不确定的收益。