QTranslator не работает

#include<QApplication>
#include<QTranslator>
#include<QObject>
#include<QTextCodec>
#include<QWidget>

int main(int argc, char* argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QApplication app(argc, argv);

    QTranslator translator;
    translator.load("app_zh_CN.qm");
    app.installTranslator(&translator);

    QWidget widget;
    widget.setWindowTitle(QObject::tr("Hello World!"));
    widget.show();
    return app.exec();
}

SOURCES += \
    main.cpp

TRANSLATIONS += app_zh_CN.ts

Интерфейс Gui - "Привет, мир!" также.. Но в моем файле .qm переводится на "你好!" (китайский)... где находится предел? кто может мне помочь..

Ответ 1

Ваш пример работает для меня, если я помещу файл .qm в "правильное" место. (См. Ниже.) Убедитесь, что вы выполняете все действия:

  • Запустите lupdate, чтобы создать файл .ts.
  • Сделайте свой перевод в Linguist и сохраните файл .ts.
  • Запустите lrelease, чтобы скомпилировать файл .ts в файл .qm.
  • Скопируйте файл .qm в нужное место.

Я предполагаю, что №4 идет плохо. В документации для QTranslator::load указано:

Если каталог не указан, каталог приложения используется исполняемый файл (т.е. как applicationDirPath()).

Однако мне пришлось поместить файл .qm в папку выше исполняемый файл, чтобы он работал как есть. Если я не ошибаюсь в документах, это ошибка Qt, но простая в использовании. Если я явно указал каталог как app.applicationDirPath, он работал в исполняемой папке. Вы также можете указать отдельный каталог. Например:

translator.load("app_zh_CN.qm"); работает с:

[MyApp]
  app_zh_CN.qm
  [debug]
    MyApp.exe

translator.load("app_zh_CN.qm", app.applicationDirPath()); работает с:

[MyApp]
  [debug]
    app_zh_CN.qm
    MyApp.exe