我尝试使用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!
。为什么一切都会发生?
答案 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)返回的目标系统。
上的i18b概述答案 1 :(得分:2)
因为这就是本地化通常如何运作的方式。您已标记可翻译字符串,如果未找到翻译,则会显示原始字符串。因此,在您的情况下,没有可用的德语翻译文件,但这并不意味着程序无法继续工作。