Я использую 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>
Я затрудняюсь объяснить это и как отладить это дальше.