【问题标题】:vc++ + QT translation of UI is not workingUI的vc++ + QT翻译不起作用
【发布时间】:2016-01-27 10:15:37
【问题描述】:

我有一个在 vc++ 中使用 QT 的项目,我需要在 UI 中将字符串定位到不同的语言。我通过 Visual Studio 2012 的 Visual Studio 插件中的 QTdesigner 创建了一个 UI,并且我还安装了 QT 插件以使用 Qt 功能。

我创建了一个 .pro 文件并添加了:

SOURCES      += main.cpp
TRANSLATIONS += languagefileqt_es.ts

在我生成语言学家文件 SOURCES emminensmultiportqt_es.ts 后,它正确检测到了我的 IU 中的所有字符串。之后,我使用 Qlinguist 的发布功能生成 .qm 文件。

我的资源文件是:

<RCC>
    <qresource prefix="MyAppQT">
        <file>languagefileqt_es.qm</file>
    </qresource>
</RCC>

然后我将它添加到我的 main.cpp 中:

QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);

并且加载在所有情况下都返回true。我的问题是执行应用程序时未翻译 UI。这很奇怪,因为它没有效果。

关于我缺少什么或我可以检查什么的任何线索?

非常感谢

【问题讨论】:

    标签: c++ qt visual-studio-2012 translation qt-linguist


    【解决方案1】:

    您确定“languagefileqt_es”是您的语言文件的正确名称吗?我希望改为“languagefileqt_es.qm”。

    您确定从正确的目录加载吗?除非您从内部编译资源 (:/languagefileqt_es.qm) 加载,否则您应该参考绝对路径以确保加载正确的内容。

    【讨论】:

    • 是的,当代码在 Visual Studio 中时,我在目录中有一个 languagefileqt_es.qm。但它与 Visual Studio 创建 .exe 时的目录不同。我试图将 qm 文件复制到那里,但它仍然不起作用。我不确定这是一个文件夹问题,因为 load 总是返回 true。有什么办法可以查看qm文件吗?
    • 在我的项目中,我通常将 qm 文件编译成资源文件,以避免 qm 文件被删除或放错位置的任何麻烦。然后像往常一样使用路径“:/resource-dir/filename.qm”或通过别名加载。
    【解决方案2】:

    我发现了问题所在。感谢@Jens 的帮助。

    我认为我犯了一个错误,即不知道翻译机制是如何工作的。在我的 main.cpp 中,我有:

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    MainWindowQT w;
    
    QTranslator translator;
    bool loaded = translator.load("languagefileqt_es");
    qDebug() << "loaded " << loaded;
    a.installTranslator(&translator);
    
    w.show();
    return a.exec(); 
    } 
    

    但我意识到如果我执行

    qDebug() <<  QApplication::translate("MainWindowQTClass", "...BOARDING", 0);
    

    在加载过程之后,它将返回正确翻译的字符串。所以我在国际化之后改变了我的 UI 的定义并且它起作用了。显然,翻译是在构造函数中调用的名为 retranslateUi() 的函数中完成的。

    正确的 main.cpp 应该是:

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);
    
    QTranslator translator;
    bool loaded = translator.load("languagefileqt_es");
    qDebug() << "loaded " << loaded;
    a.installTranslator(&translator);
    
    MainWindowQT w;
    w.show();
    return a.exec(); 
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2015-06-23
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多