我是靠谱客的博主 甜甜宝贝,最近开发中收集的这篇文章主要介绍Qt Quick实现国际化 中英文切换简明图文步骤前言一.步骤六. QML中调用,切换语言,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
- 前言
- 一.步骤
- 1、在pro文件中添加需要生成的ts文件:
- 2.通过工具-外部-语言家-update 生成zh_CN.ts和en_US.ts
- 3.通过语言家打开生成的ts文件进行翻译
- 4.将zh_CN.qm和en_US.qm添加到资源文件
- 五.新建语言切换类,并暴露给qml
- 1.qmllanguage.h
- 2.qmlLanguage.cpp实现
- 3. 将QmlLanguage传递给qml
- 六. QML中调用,切换语言
- 七、后续更新
前言
在用Qtquick做中英文切换的时候,查资料发现步骤不全或者比较杂乱
现在通过截图将每一步都完善,尽量简单详细
效果展示:
中文:
英文:
一.步骤
1、在pro文件中添加需要生成的ts文件:
TRANSLATIONS +=
zh_CN.ts
en_US.ts
2.通过工具-外部-语言家-update 生成zh_CN.ts和en_US.ts
3.通过语言家打开生成的ts文件进行翻译
1.打开zh_CN.ts 选择英译中
2.语言家识别qrTs文本,手动翻译完需要翻译的文本
3. 保存zh_CN.ts 并发布生成zh_CN.qm
同理,打开en_US.ts,en_US选择中译英;一般有了zh_CN后,实际完成的工作是英译英,因为程序中原文为英文,可能这一步能省略,但没想到办法
发布上次en_US.qm
4.将zh_CN.qm和en_US.qm添加到资源文件
五.新建语言切换类,并暴露给qml
1.qmllanguage.h
#ifndef QMLLANGUGE_H
#define QMLLANGUGE_H
#include <QObject>
#include <QTranslator>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
class QmlLanguage : public QObject
{
Q_OBJECT
public:
QmlLanguage(QGuiApplication& app, QQmlApplicationEngine &engine);
//设置为当前系统语言
void setLocalLanguage();
//获取当前系统语言,必须添加 Q_INVOKABLE 后才能在前端调用该函数
Q_INVOKABLE int getLocalLanguage();
//设置为indexOfLanguage指定的语言
Q_INVOKABLE void setLanguage(int indexOfLanguage);
private:
QGuiApplication *m_app;
QQmlApplicationEngine *m_engine;
};
#endif // QMLLANGUGE_H
2.qmlLanguage.cpp实现
#include "qmllanguge.h"
QmlLanguage::QmlLanguage(QGuiApplication &app, QQmlApplicationEngine& engine)
{
m_app = &app;
m_engine = &engine;
}
void QmlLanguage::setLocalLanguage(){
QTranslator translator;
QLocale locale;
if( locale.language() == QLocale::English ) {
translator.load(":/en_US.qm");
}
else if( locale.language() == QLocale::Chinese ) {
translator.load(":/zh_CN.qm");
}
m_app->installTranslator(&translator);
//重新载入语言包
m_engine->retranslate();
}
void QmlLanguage::setLanguage(int indexOfLanguage)
{
QTranslator translator;
if (indexOfLanguage == 0)
{
translator.load(":/en_US.qm"); //注意路径
}else if (indexOfLanguage == 1) {
translator.load(":/zh_CN.qm");
}else{
translator.load(":/en_US.qm");
}
m_app->installTranslator(&translator);
m_engine->retranslate();
}
int QmlLanguage::getLocalLanguage(){
QLocale locale;
if(locale.language() == QLocale::English){
return 0;
}else if(locale.language() == QLocale::Chinese){
return 1;
}
return 0;
}
3. 将QmlLanguage传递给qml
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTranslator>
#include <QDebug>
#include <QQmlContext>
#include "qmllanguage.h"
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
//切换为本地语言
//检测本系统语言自动装载翻译文件
//使用qt的QLocale这个类,通过这个类来获取系统本地语言环境
//QTranslator的load方法装载语言包
//QGuiApplication的实例化对象的installTranslator去实现语言翻译
QTranslator translator;
QLocale locale;
if( locale.language() == QLocale::English ) {
translator.load(":/en_us.qm");
}
else if( locale.language() == QLocale::Chinese ) {
translator.load(":/zh_CN.qm");
}
app.installTranslator(&translator);
//将QmlLanguage中的所有函数暴露给qml调用
QmlLanguage qmlLanguage(app, engine);
engine.rootContext()->setContextProperty("qmlLanguage", &qmlLanguage);
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
六. QML中调用,切换语言
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.12
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Row {
id:switch_language_row
anchors.right: parent.right
Label{
text:qsTr("language")
anchors.verticalCenter: switch_language_row.verticalCenter
}
ComboBox {
id: switch_language_combox
model:['English','简体中文']
//首先设置ComboBox显示当前系统语言
currentIndex: qmlLanguage.getLocalLanguage()
onActivated: {
//用户使用ComboBox后根据index调用cpp中的方法
qmlLanguage.setLanguage(index)
//设置ComboBox的显示语言
currentIndex = index
}
}
}
}
七、后续更新
后续有更改,直接工具-外部-语言家-update
后 打开语言家程序,单独一个一个打开,翻译后保存并发布;不要一起打开,会比较混乱
参考:https://blog.csdn.net/eichitang/article/details/123117325
最后
以上就是甜甜宝贝为你收集整理的Qt Quick实现国际化 中英文切换简明图文步骤前言一.步骤六. QML中调用,切换语言的全部内容,希望文章能够帮你解决Qt Quick实现国际化 中英文切换简明图文步骤前言一.步骤六. QML中调用,切换语言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复