2012-12-05 30 views
0

我打算用wxWidgets重寫我們的應用程序。也因爲如此,我想用人類語言的工作方式。我們目前使用其中四種:捷克語,斯洛伐克語,英語和德語。特定的語言並不重要。gettext:如何回退到基本語言?

重要的是,捷克語和英語被認爲是一種基本語言。這意味着如果使用切換到德語,並且文本沒有在那裏定義,他或她會自動獲取英文文本(這裏沒有gettext問題)。但是,當用戶使用斯洛伐克語時,則後備語言是捷克語。而當用戶使用英語時,甚至可以回到捷克語(開發者的一種錯誤,因爲英語也應該是完整的)。

我知道gettext使用一種語言作爲默認值 - 直接寫入源代碼。其他語言以.mo文件提供。成爲gettext和wxWidgets的新手...

是否有任何方法將回退實現爲與默認語言(即源文件)不同的另一種顯式語言?換句話說,更多的語言可以存在於內存中並動態切換?

感謝您的時間和經驗,

切赫

回答

1

不,你不能有選擇地提供這樣的回退。 OTOH絕對不會阻止您將捷克語翻譯複製到斯洛伐克語(即cp cz.po sk.po),然後僅用真正的斯洛伐克語翻譯替換其中的一部分。當然,對於德語,如果您在源語言中使用英語(即使您的母語是捷克語,我強烈建議您這樣做),它也應該自動工作。

+0

謝謝。這是有道理的。所以,我不應該深入到wxTranslations?另一種語言設置時,語言是否完全關閉了內存? – pepr

+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; 
} 
+0

是的,我從wxBook的第444頁就知道了。重建GUI或者至少在重新設置所有文本時,我可以通過用戶干預(比如選擇菜單項)來切換語言。問題是如果我可以做一個單一的缺失字符串。但是,謝謝你的信息。 +1 – pepr