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语言?但是,当我尝试实际添加一些翻译时,它什么也没改变,程序总是 print 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 的返回应该告诉您是否找到了目录。

如果未找到目录,您需要将 .mo 文件与您的应用程序一起安装在目标系统的适当位置,即 wxStandardPaths::GetLocalizedResourcesDir(wxStandardPaths::ResourceCat_Messages) 返回的位置。

请阅读http://docs.wxwidgets.org/trunk/overview_i18n.html上的 i18b 概述

于 2013-01-03T12:30:36.363 回答
2

因为这就是本地化通常的工作方式。您已标记可翻译字符串,如果未找到翻译,则会显示原文。因此,在您的情况下,没有可用的德语翻译文件,但这并不意味着程序无法继续工作。

于 2013-01-03T12:36:46.817 回答