工具 lupdate
提取字符串,形成 ts 文件
工具 Qt Linguist QT语言家,人工手动翻译 ts 文件;
工具 lrelease
发布,将人工翻译后的 ts 文件,整理生成二进制语言 QM 文件;
备注:
运行lupdate产生一组翻译源(TS)文件,里面含有所有用户可见的文本,但未经过翻译。
把生成的TS文件交给翻译者(谁使用Qt Linguist添加翻译)。Qt Linguist关注任何源文本的改变或删除。
运行lupdate,可以从应用程序中同步用户可见的文本,它不会破坏任何数据。
发布应用程序,运行lrelease,即可读取TS文件,并生成用于应用程序运行时的QM文件。
为了Qt识别你在程序中需要语言准换的文字,需要将需要转换的文字使用QObject::tr(“…”) 进行标记,否则程序中并不能对其进行识别。例如:
label->setText(tr( "Hello World"));
而在ui窗口直接进行添加一些插件中的语言,一般默认可以识别进行翻译的。如果我们想将其关掉,可以选择插件的属性,将toolTip中“可翻译的”直接取消勾选即可。
在 VS 中,右击工程【属性】-->【Qt】-->【Iupdate All .ts Files in Project】
Iupdate 将自动将 程序中用 tr 包裹的字符串,导出至 ts 文件中
首先,设置要翻译成哪国语言
然后,人工输入对应的语言文字
点击左侧【上下文】选择你要翻译的类文件,点击中间的【字符串】选择需要翻译的文字,最后,在中间的【源文】写出对应翻译
lrelease
将人工翻译的 ts 文件,生成最后 二进制语言 qm 文件在 VS 中,右击工程【属性】-->【Qt】-->【Irelease All .ts Files in Project】
Irelease 将自动将 ts 文件,生成为二进制 qm 文件
在 VS 中,右击工程【属性】-->【Qt】-->【Create New Translation File】
选择要生成的对应国家的语言,生成新的 ts 文件
在 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
&& 表示同时运行后边的命令
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); // 重新设置界面显示,如何有很多的界面,需全部重新更新
}
如: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 qtTranslator(new QTranslator);
if (qtTranslator->load(languageFile, qtTrPath))
{
app.installTranslator(qtTranslator.take());
}
}