c++ - wxWidgets 翻译不加载

标签 c++ internationalization wxwidgets

我正在尝试学习如何使用 wxWidgets 将文本国际化。我有 wxWidgets 3.1.0设置和工作,并在 Windows 10 上使用 Visual C++ 2015。

我确实在一次意外中让这个工作正常,然后我尝试翻译更多文本,但它停止工作了。我不确定我做错了什么,但我似乎配置有误或遗漏了一个步骤。

我写了一个SSCCE对此进行测试,但它仍然失败,表明我可能做错了什么,这不是我正在处理的真实项目的问题。

C++代码:

#include <iostream>
#include <wx/wx.h>
class Application : public ::wxApp {
public:
  virtual bool OnInit() override {
    wxMessageBox(_("MyTranslation"), "Test", wxOK | wxICON_INFORMATION);
    return false;
  }
};
wxIMPLEMENT_APP(Application);

在项目根目录(工作目录)中,我有一个包含 PO/MO 文件的文件夹“en”。

测试.po:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Test\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-04-25 00:59-0400\n"
"PO-Revision-Date: 2016-04-25 16:36-0400\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.7\n"

#
msgid "MyTranslation"
msgstr "Hello world!"

Poedit此文件没有问题,并且 msgfmt 没有发出警告或错误。

然后我运行以下命令来创建 mo 文件:

msgfmt test.po -otest.mo

当我运行应用程序时,弹出消息框,但内容是“MyTranslation”而不是“Hello world!”

enter image description here

另请注意,我使用的是默认语言环境 (en),所以现在我没有弄乱 wxLocale 实例。最终我将需要这样做,但我在这里采取的只是一些小步骤——除非我需要,否则将更多代码堆放在一个损坏的进程上是没有意义的。

我做错了什么,我需要做什么来解决它?

最佳答案

根据 wxWiki您需要初始化语言支持,就像您对 plain gettext 所做的那样.

这是您的工作演示更新:

#include <iostream>
#include <wx/wx.h>
class Application : public ::wxApp {
public:
  virtual bool OnInit() override {
    wxLocale* locale = new wxLocale(wxLANGUAGE_DEFAULT);
    locale->AddCatalogLookupPathPrefix(wxT("."));
    locale->AddCatalog(wxT("test"));
    wxMessageBox(_("MyTranslation"), "Test", wxOK | wxICON_INFORMATION);
    return false;
  }
};
wxIMPLEMENT_APP(Application);

关于c++ - wxWidgets 翻译不加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851155/

相关文章:

c++ - 读取整数文件并将每一行存储在一个单独的数组中

c++ - 在 C++ 中将数字和 stdString 解析为 char* [QT]

Java 邮件字符集 ISO-8859-2 不工作

java - Swing 中的本地化加速器(JMenuItem 热键)

c++ - 3.1.3 上的 wxWidgets mac 剪贴板坏了?

c++ - 非法引用非静态成员或未解析的外部符号

c++ - wxWidgets + OpenCV 矩形崩溃 OnButtonClick()

c++ - 可以使用一个指针来匹配 Python 中 float 变量的 int 值吗?

c++ - 获取一个文件名的方法-自定义界面-Microsoft Visual Studio 2010

html - 使用浏览器,我如何知道操作系统使用哪个小数点分隔符?