开发者社区> 问答> 正文

Qt 国际化,如何翻译从json配置文件读取的内容:报错

我们的项目是用Qt 做的,现在要做国际化,翻译成多种语言,一般只要把代码中需要翻译的字符串用tr包起来,生成ts文件,然后就可以翻译了。可是界面上有一部分内容是从json配置文件读取的,这部分应该怎么处理,求大神指导!

展开
收起
kun坤 2020-06-08 18:48:13 819 0
1 条回答
写回答
取消 提交回答
  • 
    参考以下代码:
    
    const QVariantMap Appsetting::getConfig(const QString &configName)
    {
        auto cnf = configName.toLower();
        QVariantMap varMap;
            QDir dir(configPath()); //change it to your configpath
            QStringList filters = { configName + ".json", configName };
            const auto filist = dir.entryInfoList(filters);
    
            if (filist.isEmpty()) {
                qDebug("No such config, %s", qPrintable(configName));
            } else {
                for (auto &fi : filist) {
                    auto suffix = fi.completeSuffix().toLower();
                        // JSON format
                        QFile jsonFile(fi.absoluteFilePath());
                        if (jsonFile.open(QIODevice::ReadOnly)) {
                            auto json = QJsonDocument::fromJson(jsonFile.readAll()).object();
                            jsonFile.close();
                             varMap = json.toVariantMap();
                            break;
                        }
                }
            }
    
        return varMap;
    }
     ######说一下思路吧: 1、json中读取的应该是固定的字符串,不论是key还是value。那么这些字符串应该是有个全集的。 2、在Qt中建立QHash,对应的是:QHash<QString, QString> translationMap; translationMap.append("原始文字", tr("原始文字")); 生成对应的翻译Hash Map 3、对于每个读取到的东西,直接去Hash中查,然后输出Hash Map的结果就好。######另一种方法: 直接提供翻译的json,然后以一种格式命名,例如:data_zhCN.json,data_enUS.json,data_hkCN.json 然后在tr里面提供一个字符串,例如:QString suffix=tr("enUS"); 并且在ts中将其翻译为zhCN、hkCN等 以这个后缀拼接文件名:QString("data_%1.json").arg(suffix)来调用对应翻译好的json,也可以解决这个问题。
    2020-06-08 18:48:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载