【问题标题】:Why wxLocale don't even try to load language?为什么 wxLocale 甚至不尝试加载语言?
【发布时间】:2013-01-03 11:03:28
【问题描述】:

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

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

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

    【讨论】:

      【解决方案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 概述

      【讨论】:

      • 好的,谢谢,我明白了。但是应该如何组织目录呢?比如在测试阶段我想把所有的翻译都放到/home/User/locale目录下,应该放什么? /home/User/locale/de/LC_MESSAGES/app.mo?它仍然没有加载目录...我尝试locale-&gt;AddCatalog(wxT("/home/User/locale")),它返回0。wxLocale如何知道应用程序名为app
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多