0

我在 Windows 10 上使用 QT Linguist 5.13.2。

该项目有许多翻译文件,除了意大利语的一个之外,它们都可以工作。

以下是选项映射到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.tstrn_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>

我无法解释这一点,以及如何进一步调试。

4

1 回答 1

0

经过多次试验和错误,我发现意大利语翻译不起作用的原因是因为该trn_it.qm文件(这是新的)没有被添加为项目的资源(例如,通过 Qt Creator)。

一旦完成,清理和重建就可以了。

于 2021-01-09T12:24:23.443 回答