0.工具说明:
-
工具
lupdate提取字符串,形成 ts 文件 -
工具 Qt Linguist QT语言家,人工手动翻译 ts 文件;
-
工具
lrelease发布,将人工翻译后的 ts 文件,整理生成二进制语言 QM 文件;
备注:
-
运行lupdate产生一组翻译源(TS)文件,里面含有所有用户可见的文本,但未经过翻译。
-
把生成的TS文件交给翻译者(谁使用Qt Linguist添加翻译)。Qt Linguist关注任何源文本的改变或删除。
-
运行lupdate,可以从应用程序中同步用户可见的文本,它不会破坏任何数据。
-
发布应用程序,运行lrelease,即可读取TS文件,并生成用于应用程序运行时的QM文件。
1. 代码程序中用 tr 声明
为了Qt识别你在程序中需要语言准换的文字,需要将需要转换的文字使用QObject::tr(“…”) 进行标记,否则程序中并不能对其进行识别。例如:
label->setText(tr( "Hello World"));
而在ui窗口直接进行添加一些插件中的语言,一般默认可以识别进行翻译的。如果我们想将其关掉,可以选择插件的属性,将toolTip中“可翻译的”直接取消勾选即可。

2.用工具 lupdate 提取待翻译的字符串生成 ts 文件

在 VS 中,右击工程【属性】-->【Qt】-->【Iupdate All .ts Files in Project】
Iupdate 将自动将 程序中用 tr 包裹的字符串,导出至 ts 文件中
3.将生成的 ts 文件,用 linguist 工具打开并翻译
首先,设置要翻译成哪国语言

然后,人工输入对应的语言文字

点击左侧【上下文】选择你要翻译的类文件,点击中间的【字符串】选择需要翻译的文字,最后,在中间的【源文】写出对应翻译
4.用工具 lrelease 将人工翻译的 ts 文件,生成最后 二进制语言 qm 文件
在 VS 中,右击工程【属性】-->【Qt】-->【Irelease All .ts Files in Project】
Irelease 将自动将 ts 文件,生成为二进制 qm 文件

5. 若有第三种语言,可再次创建 ts 文件,然后执行 2-4 步操作
在 VS 中,右击工程【属性】-->【Qt】-->【Create New Translation File】
选择要生成的对应国家的语言,生成新的 ts 文件

6. 将多个 qm 文件,编译成一个,便于代码的加载
在 main 函数所在的工程,右击【属性】-->【生成事件】-->【生成后事件】-->【命令行】添加合成命令,如下:
C:\Qt\Qt5.12.5\5.12.5\msvc2017_64\bin\lconvert.exe -o ..\..\..\x64\Debug\translations\All_zh_CN.qm bingolive_zh.qm ..\..\libs\FVMVD\fvmvd_zh.qm && C:\Qt\Qt5.12.5\5.12.5\msvc2017_64\bin\lconvert.exe -o ..\..\..\x64\Debug\translations\All_de.qm bingolive_de.qm ..\..\libs\FVMVD\fvmvd_de.qm
【解释】:
使用 lconvert.exe 工具
将 bingolive_zh.qm、fvmvd_zh.qm 融合成一个文件 All_zh_CN.qm
同时,将 bingolive_de.qm、fvmvd_de.qm 融合成一个文件 All_de_CN.qm
&& 表示同时运行后边的命令

7. 在代码中加载 qm 文件
void MainWindow::changeTr(int language_label)
{
QString qmFilename;
static QTranslator* translator;
if (translator != NULL)
{
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
translator = new QTranslator;
QString runPath = QCoreApplication::applicationDirPath(); //获取文件运行路径
if(language_label==1)
{
qmFilename = runPath + "/All_ch.qm";
}
else
{
qmFilename = runPath + "/All_de.qm";
}
if (translator->load(qmFilename))
{
qApp->installTranslator(translator);
}
ui->retranslateUi(this); // 重新设置界面显示,如何有很多的界面,需全部重新更新
}
8.加载 QT 自带语言包 - 用于翻译 QT 自带的控件
如:QDialogButtonBox中的Open和Cancle按钮
QLineEdit右键菜单 -- 若加载系统语言翻译不管用,则需重新生成,在widgets.pro所在目录下生成一个widgets.ts文件,用Qt Linguist打开widgets.ts,找到 QWidgetTextControl,翻译相关选项
// 获取想加载的语言类型;
QString strLangue = tr("zh_CH");
// 获取 qt 自带翻译文件路径 - 也可将这些文件,复制到安装目录新文件夹下;
QString qtTrPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
QString languageFiles = QDir(qtTrPath).entryList(QStringList(QStringLiteral("*%1.qm").arg(strLangue)));
foreach(QString languageFile, languageFiles)
{
QScopedPointer<QTranslator> qtTranslator(new QTranslator);
if (qtTranslator->load(languageFile, qtTrPath))
{
app.installTranslator(qtTranslator.take());
}
}
本文详细介绍了如何在QT应用中实现多语言支持,包括使用tr声明可翻译文本,通过lupdate提取ts文件,使用Qt Linguist进行翻译,lrelease生成qm文件,以及如何处理多种语言的合并和加载。此外,还提到了QT自带控件的翻译处理方法。
2117

被折叠的 条评论
为什么被折叠?



