我们的项目是用Qt 做的,现在要做国际化,翻译成多种语言,一般只要把代码中需要翻译的字符串用tr包起来,生成ts文件,然后就可以翻译了。可是界面上有一部分内容是从json配置文件读取的,这部分应该怎么处理,求大神指导!
参考以下代码:
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,也可以解决这个问题。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。