1

wxWidgets を使用してアプリケーションを書き直す予定です。gettextそのためにも、人間の言語を扱う方法を使いたいと思っています。現在、チェコ語、スロバキア語、英語、ドイツ語の 4 つを使用しています。特定の言語はそれほど重要ではありません。

重要なのは、チェコ語と英語が一種の基本言語と見なされていることです。これは、用途がドイツ語に切り替わり、テキストがそこで定義されていない場合、ユーザーは自動的に英語のテキストを取得することを意味します (ここでは gettext で問題ありません)。ただし、ユーザーがスロバキア語を使用する場合、フォールバック言語はチェコ語になります。また、ユーザーが英語を使用すると、チェコ語にフォールバックすることさえあります (英語も完全である必要があるため、開発者による一種のバグです)。

gettext がデフォルトとして 1 つの言語を使用することは知っていますが、ソースに直接記述されています。他の言語は .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 に答える