QT 多语言切换 - Qt Linguist - 三种语言以上

0.工具说明:

  • 工具 lupdate 提取字符串,形成 ts 文件

  • 工具 Qt Linguist QT语言家,人工手动翻译 ts 文件;

  • 工具 lrelease 发布,将人工翻译后的 ts 文件,整理生成二进制语言 QM 文件;

备注:

  1. 运行lupdate产生一组翻译源(TS)文件,里面含有所有用户可见的文本,但未经过翻译。

  2. 把生成的TS文件交给翻译者(谁使用Qt Linguist添加翻译)。Qt Linguist关注任何源文本的改变或删除。

  3. 运行lupdate,可以从应用程序中同步用户可见的文本,它不会破坏任何数据。

  4. 发布应用程序,运行lrelease,即可读取TS文件,并生成用于应用程序运行时的QM文件。

1. 代码程序中用 tr 声明

为了Qt识别你在程序中需要语言准换的文字,需要将需要转换的文字使用QObject::tr(“…”) 进行标记,否则程序中并不能对其进行识别。例如:

label->setText(tr( "Hello World"));

而在ui窗口直接进行添加一些插件中的语言,一般默认可以识别进行翻译的。如果我们想将其关掉,可以选择插件的属性,将toolTip中“可翻译的”直接取消勾选即可。

                                 QT 多语言切换 - Qt Linguist - 三种语言以上_第1张图片

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

QT 多语言切换 - Qt Linguist - 三种语言以上_第2张图片

在 VS 中,右击工程【属性】-->【Qt】-->【Iupdate All .ts Files in Project】

Iupdate  将自动将 程序中用 tr 包裹的字符串,导出至 ts 文件中

3.将生成的 ts 文件,用 linguist 工具打开并翻译

首先,设置要翻译成哪国语言

QT 多语言切换 - Qt Linguist - 三种语言以上_第3张图片

 

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

QT 多语言切换 - Qt Linguist - 三种语言以上_第4张图片

点击左侧【上下文】选择你要翻译的类文件,点击中间的【字符串】选择需要翻译的文字,最后,在中间的【源文】写出对应翻译

 

4.用工具 lrelease 将人工翻译的 ts 文件,生成最后 二进制语言 qm 文件

在 VS 中,右击工程【属性】-->【Qt】-->【Irelease All .ts Files in Project】

Irelease 将自动将  ts 文件,生成为二进制 qm 文件

QT 多语言切换 - Qt Linguist - 三种语言以上_第5张图片
 

5. 若有第三种语言,可再次创建 ts 文件,然后执行 2-4 步操作

在 VS 中,右击工程【属性】-->【Qt】-->【Create New Translation File】

选择要生成的对应国家的语言,生成新的  ts 文件

QT 多语言切换 - Qt Linguist - 三种语言以上_第6张图片

 

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

&& 表示同时运行后边的命令

QT 多语言切换 - Qt Linguist - 三种语言以上_第7张图片

 

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 qtTranslator(new QTranslator);
  if (qtTranslator->load(languageFile, qtTrPath)) 
  {
    app.installTranslator(qtTranslator.take());
  }
}

 

 

你可能感兴趣的:(Qt)