You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt翻译:如何为未完成翻译设置备选语言优先级?

Qt多语言翻译优先级配置方案

完全可以实现这种多级翻译 fallback 逻辑,Qt本身没有直接提供该功能,但可以通过自定义翻译器来实现:

  • 自定义翻译管理类
    继承QTranslator,内部维护一个按优先级排序的翻译器列表。重写translate()方法时,依次遍历列表中的翻译器,只要找到非空且不等于源文本的翻译结果就返回;如果所有备选翻译器都没有对应内容,最后返回基准语言(德语)的翻译。

  • 代码实现示例

    #include <QTranslator>
    #include <QList>
    
    class MultiTranslator : public QTranslator
    {
        Q_OBJECT
    public:
        explicit MultiTranslator(QObject *parent = nullptr) : QTranslator(parent) {}
    
        void addTranslator(QTranslator *translator) {
            if (translator) {
                m_translators.append(translator);
            }
        }
    
        QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const override {
            // 按优先级遍历翻译器
            for (QTranslator *trans : m_translators) {
                QString result = trans->translate(context, sourceText, disambiguation, n);
                if (!result.isEmpty() && result != sourceText) {
                    return result;
                }
            }
            // 所有备选都无翻译,返回基准语言翻译
            return QTranslator::translate(context, sourceText, disambiguation, n);
        }
    
    private:
        QList<QTranslator*> m_translators;
    };
    

    使用时按优先级顺序添加翻译器:

    QApplication app(argc, argv);
    
    // 加载各语言翻译文件
    QTranslator deTrans; // 基准德语翻译器
    deTrans.load("de.qm");
    QTranslator enTrans; // 备选英语翻译器
    enTrans.load("en.qm");
    QTranslator czTrans; // 当前目标语言捷克语翻译器
    czTrans.load("cz.qm");
    
    MultiTranslator multiTrans;
    // 设置优先级:捷克语 → 英语 → 德语
    multiTrans.addTranslator(&czTrans);
    multiTrans.addTranslator(&enTrans);
    multiTrans.addTranslator(&deTrans);
    
    app.installTranslator(&multiTrans);
    
  • 关键注意事项

    • 可通过load()的返回值验证翻译文件是否加载成功
    • 切换目标语言时,重新调整翻译器列表的优先级顺序即可
    • 动态生成的文本需确保调用自定义翻译器的翻译逻辑

内容的提问来源于stack exchange,提问作者jokn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:20:59