Файл Qt Linguist QM не загружается

Я использую QT Linguist 5.13.2 в Windows 10.

В проекте есть несколько файлов перевода, которые все работают, кроме файла для итальянского языка.

Вот фрагмент соответствующего кода, где опция сопоставлена ​​с файлом qm:

void Stg::initTranslators()
{
    _translatorEn = new QTranslator(this);
    _translatorPl = new QTranslator(this);
    _translatorFr = new QTranslator(this);
    _translatorDe = new QTranslator(this);
    _translatorNl = new QTranslator(this);
    _translatorEs = new QTranslator(this);
    _translatorIt = new QTranslator(this);
    _translatorPt = new QTranslator(this);
    _translatorAr = new QTranslator(this);
    _translatorZh = new QTranslator(this);

    _translatorEn->load(QStringLiteral(":/translation/translation/trn_en.qm"));
    _translatorPl->load(QStringLiteral(":/translation/translation/trn_pl.qm"));
    _translatorFr->load(QStringLiteral(":/translation/translation/trn_fr.qm"));
    _translatorDe->load(QStringLiteral(":/translation/translation/trn_de.qm"));
    _translatorNl->load(QStringLiteral(":/translation/translation/trn_nl.qm"));
    _translatorEs->load(QStringLiteral(":/translation/translation/trn_es.qm"));
    _translatorIt->load(QStringLiteral(":/translation/translation/trn_it.qm"));  // Italian
    _translatorPt->load(QStringLiteral(":/translation/translation/trn_pt.qm"));
    _translatorAr->load(QStringLiteral(":/translation/translation/trn_ar.qm"));
    _translatorZh->load(QStringLiteral(":/translation/translation/trn_zh.qm"));
}

В коде при выборе языка этот код выполняется для установки языка:

    switch (_appLanguage) {
    case LANG_EN : { qApp->installTranslator(_translatorEn); } break;
    case LANG_PL : { qApp->installTranslator(_translatorPl); } break;
    case LANG_FR : { qApp->installTranslator(_translatorFr); } break;
    case LANG_DE : { qApp->installTranslator(_translatorDe); } break;
    case LANG_NL : { qApp->installTranslator(_translatorNl); } break;
    case LANG_ES : { qApp->installTranslator(_translatorEs); } break;
    case LANG_IT : { qApp->installTranslator(_translatorIt); } break;  // Italian
    case LANG_PT : { qApp->installTranslator(_translatorPt); } break;
    case LANG_AR : { qApp->installTranslator(_translatorAr); } break;
    case LANG_ZH : { qApp->installTranslator(_translatorZh); } break;
    default : { } break;
    }

Все языки переключаются корректно, кроме итальянского.

Чтобы определить, связана ли проблема с файлом перевода или кодом переключения, я меняю сопоставление на арабский для итальянского выбора:

    _translatorIt->load(QStringLiteral(":/translation/translation/trn_ar.qm"));  // Italian

При этом языковые настройки переключаются на арабский при выборе итальянского, что предполагает проблему в trn_it.ts и/или сгенерированном trn_it.qm.

Когда я загружаю файл trn_it.ts в Qt Linguist, он не сообщает об ошибках, а сгенерированный файл trn_it.qm (с помощью File->Release) имеет правильный размер (как и файлы qm другого языка).

Выполнение diff между файлами trn_it.ts и trn_de.ts показывает, что единственными различиями являются ожидаемые элементы <translation>. Все остальное то же самое.

Вот фрагмент:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
    <name>AboutDialog</name>
    <message>
        <location filename="ui/aboutdialog.cpp" line="90"/>
        <location filename="ui/aboutdialog.cpp" line="98"/>
        <source>Unregistered</source>
        <translation>Non registrato</translation>
    </message>

Я затрудняюсь объяснить это и как отладить это дальше.


person TenG    schedule 06.01.2021    source источник


Ответы (1)


После долгих проб и ошибок я обнаружил, что итальянский перевод не работает из-за того, что файл trn_it.qm (который был новым) не был добавлен в качестве ресурса (например, через Qt Creator) для проекта.

Как только это было сделано, очистка и восстановление сделали свое дело.

person TenG    schedule 09.01.2021