为什么wxLocale甚至不尝试加载语言?

时间:2013-01-03 11:03:29

标签: c++ wxwidgets

我尝试使用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!。为什么一切都会发生?

2 个答案:

答案 0 :(得分:2)

您需要在Init。

之后调用AddCatalog()

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

域名字符串只是应用程序名称。

查看国际示例代码

的第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概述

答案 1 :(得分:2)

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