家政网站设计,海口自助建站软件,进出口贸易公司怎么注册,小程序开发外包该注意些什么这篇文章展示了集成Qt Linguist 的功能。 但是有时候Qt的翻译功能比较繁琐#xff0c;我们简单项目只需要使用本地化功能#xff0c;将中文字符串导入到项目中#xff0c;避免编码格式问题导致的乱码。 只需要使用一个简单的json或者其他格式的本地文件作为映射的key/value.…这篇文章展示了集成Qt Linguist 的功能。 但是有时候Qt的翻译功能比较繁琐我们简单项目只需要使用本地化功能将中文字符串导入到项目中避免编码格式问题导致的乱码。 只需要使用一个简单的json或者其他格式的本地文件作为映射的key/value.
当完全需要自定义翻译文件或者只是简单的避免将中文写入cpp文件导致显示在ui上乱码时可以使用
创建 派生类并实现翻译方法。
class JBTranslator : public QTranslator {public://保存自己的翻译QHashQString, QString m_texts;//override 基类虚函数当需要翻译的时候会自动调用QString translate(const char *context, const char *sourceText, const char *disambiguation nullptr, int n -1) const override{if (m_texts.contains(sourceText)) {return m_texts.value(sourceText);}return sourceText;}
};在 app 初始化后立即注册调用
int main(int argc, char *argv[])
{QApplication a(argc, argv);// 申明自定义类的实例JBTranslator translator;//用自定义的翻译实例替换系统默认的QApplication::installTranslator(translator);/* :/tran.json 文件的内容该文件也可以放在其他位置或其他类型的文件只需要最终读取出来放入translator.m_texts变量即可
{Hello_key: 你好这是value,Hello_key2: 中文测试文字2
}
*/QFile file(:/tran.json);if (!file.open(QFile::ReadOnly)) {qWarning() Cannot open translation file for reading.;return -1;}QJsonDocument doc QJsonDocument::fromJson(file.readAll(), nullptr);QJsonObject jsonObj doc.object();for (auto it jsonObj.begin(); it ! jsonObj.end(); it) {//将自定义的json文件的翻译字段加载到我们类的变量中translator.m_texts.insert(it.key(), it.value().toString());}//这里调用后会在 JBTranslator::translate(...) 方法中查找并返回翻译好的字符串//手动调用tr(), 或者ui文件中自动调用翻译功能QString t QObject::tr(Hello_key);//localized string: 你好这是valueqDebug() localized string: t; MainWindow w;w.show();return a.exec();
}验证结果
调用代码 QString t QObject::tr(Hello_key);qDebug() localized string: t; 打印结果 localized string: 你好这是value
全局代码
#include mainwindow.h#include QApplication
#include QTranslator
#include QFile
#include QJsonDocument
#include QJsonObject
#include QTextStream
#include QHash
#include QDebugclass JBTranslator : public QTranslator {public://保存自己的翻译QHashQString, QString m_texts;//override 基类虚函数当需要翻译的时候会自动调用QString translate(const char *context, const char *sourceText, const char *disambiguation nullptr, int n -1) const override{if (m_texts.contains(sourceText)) {return m_texts.value(sourceText);}return sourceText;}
};int main(int argc, char *argv[])
{QApplication a(argc, argv);// 申明自定义类的实例JBTranslator translator;//用自带的翻译实例替换系统默认的QApplication::installTranslator(translator);/*
{Hello_key: 你好这是value,Hello_key2: 中文测试文字2
}
*/QFile file(:/tran.json);if (!file.open(QFile::ReadOnly)) {qWarning() Cannot open translation file for reading.;return -1;}QJsonDocument doc QJsonDocument::fromJson(file.readAll(), nullptr);QJsonObject jsonObj doc.object();for (auto it jsonObj.begin(); it ! jsonObj.end(); it) {//将自定义的json文件的翻译字段加载到我们类的变量中translator.m_texts.insert(it.key(), it.value().toString());}//这里调用后会在 JBTranslator::translate(...) 方法中查找并返回翻译好的字符串QString t QObject::tr(Hello_key);//localized string: 你好这是valueqDebug() localized string: t; MainWindow w;w.show();return a.exec();
}