0

wxLocaleを使用して単純な多言語プログラムを作成しようとしましたが、失敗することすらありません。言語を読み込もうとすると、常にOKが返されますが、何も変更されないようです。

#include <wx/intl.h>
#include <wx/stdpaths.h>
#include <wx/app.h>
#include <wx/txtstrm.h>
#include <wx/wfstream.h>

wxFFileOutputStream wxstdout (stdout); wxTextOutputStream cout(wxstdout);
wxFFileOutputStream wxstderr (stderr); wxTextOutputStream cerr(wxstderr);


class app: public wxApp
{
    public:
        virtual bool OnInit();
};

bool app::OnInit()
{
    long language =  wxLANGUAGE_GERMAN;    
    wxLocale* locale = new wxLocale();

    if (locale->Init(language, wxLOCALE_CONV_ENCODING))
       cerr << L"Language loaded OK\n";
    else
       cerr << L"Language loading failed\n";

    cout << _("Hi!") << endl;

    exit(0);

    return true;

}

IMPLEMENT_APP_CONSOLE(app);

どの言語を指定しようとしても、常に印刷されます

Language loaded OK
Hi!

翻訳(.poファイルと.moファイル)がないので、Init言語に失敗するはずだと思いますか?しかし、実際にいくつかの翻訳を追加しようとすると、何も変更されず、プログラムは常に印刷しますHi!。なぜそれがすべて起こるのですか?

4

2 に答える 2

2

Init の後に AddCatalog() を呼び出す必要があります。

http://docs.wxwidgets.org/trunk/classwx_translations.html#a3074f9d91c92bd0ade9e6aea4affc652

ドメイン文字列は、単なるアプリケーション名です。

internat サンプル コードの 247 行目を見てください。

http://svn.wxwidgets.org/viewvc/wx/wxWidgets/trunk/samples/internat/internat.cpp?view=markup

init() の呼び出しは、ロケールを設定するだけです。システムがロケールを認識している場合、成功を返します。カタログはロードされません。AddCatalog からの戻り値で、カタログが見つかったかどうかがわかります。

カタログが見つからない場合は、wxStandardPaths::GetLocalizedResourcesDir( wxStandardPaths::ResourceCat_Messages ) によって返されるターゲット システムの適切な場所に、アプリケーションと共に .mo ファイルをインストールする必要があります。

http://docs.wxwidgets.org/trunk/overview_i18n.htmlで i18b の概要をお読みください。

于 2013-01-03T12:30:36.363 に答える
2

それがローカリゼーションの一般的な仕組みだからです。翻訳可能な文字列をマークしました。翻訳が見つからない場合は、元のものが表示されます。したがって、あなたの場合、利用可能なドイツ語の翻訳ファイルはありませんが、それはプログラムが動作し続けられないという意味ではありません.

于 2013-01-03T12:36:46.817 に答える