Qt Linguist 介绍和简单应用

简介

Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。

发布者:承担了全面发布应用程序的责任。通常,他们协调开发者和翻译者的工作,可以使用lupdate工具同步源代码,进行翻译,使用lrelease同步工具为发布应用程序创建运行时使用的翻译文件。

翻译者:可以使用Qt Linguist工具翻译应用程序的文本。当然,这必须要有专业的翻译知识。

开发者:必须创建Qt应用程序能够使用的翻译文本。也应该帮助翻译者识别短语出现的场景。

发布者

Qt Linguist为发布者提供了两款工具-lupdate和lrelease。它们可以处理qmake项目文件,或直接在文件系统上运行。

创建翻译文件

要创建翻译文件:

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

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

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

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

使用lupdate

用法: 
Creator菜单栏,选择:工具->外部->Qt语言家->更新翻译(lupdate) 
命令行:lupdate myproject.pro

使用lrelease

用法: 
Creator菜单栏,选择:工具->外部->Qt语言家->发布翻译(lrelease ) 
命令行:lrelease myproject.pro


第一部分:

在上面,源文件中的相关字符串已经使用tr函数包装起来了。现在要做的就是更新这些要翻译的字符串到ts文件。lupdate就是用于扫描pro文件中指定的代码或UI文件中被tr包装起来的文本。

lupdate的使用

lupdate的使用可以使用lupdate --help来查看。
粗略的说一下这个工具的用法:

使用方法:
lupdate [选项] [项目文件]...
lupdate [选项] [源文件 | 路径 | @ lst 文件]...-ts ts 文件 | @ lst 文件

lupdate [选项] 源文件 -ts 目标文件

Qt Linguist 介绍和简单应用_第1张图片

生成ts文件 

  此时在pro文件里加入

TRANSLATIONS = zh_hans.ts 生成相应的ts文件

第二步: 

翻译者

Qt Linguist是为Qt应用程序添加翻译的工具。

在Qt语言主窗口包含一个菜单栏和以下视图: 
上下文(F6):将要被翻译的字符串所在的上下文列表。 
字符串(F7):用于查看上下文中翻译的字符串。 
短语和表单(F9):用于查看当前字符串所在的上下文,如果上下文源代码可访问。 
翻译区:显示源文、进行译文及译文注释。 
短语和猜测(F10):用于查看为当前字符串可能的翻译。 
警告(F8):查看未通过验证测试的翻译字符串。


Qt Linguist 介绍和简单应用_第2张图片

翻译区(1)是始终可见。要显示/隐藏其它视图,选择:查看->视图,也可以使用上面列出的快捷键。由于各个窗口为悬浮界面,所以可以通过标题栏任意拖动。

翻译字符串

在Qt Linguist中打开翻译源(TS)文件进行翻译。TS文件是可读的XML文件-包含源短语及其翻译,TS文件通常由lupdate创建与更新。

Qt Linguist在翻译领域显示目标语言,相应的输入字段适应复数形式。当打开多个TS文件同时翻译时,译文和译文注释字段显示为每种语言的。

要翻译字符串:

1选择:文件->打开(Ctrl+O)来加载TS文件。

 2在上下文视图中选择一个上下文,来加载翻译的字符串到字符串视图中。

3选择字符串视图中的某个需要翻译的字符串。

4在翻译区域输入当前字符串对应的译文。 
5也可以通过双击它从短语和猜测视图中选择现有的翻译。短语是从短语书籍中读取,猜测是在TS文件类似的短语中查找现有的翻译。

6 这项是可选的,可以输入译文注释,方便其他翻译者理解。

7 如果接受这个翻译,按Ctrl+Enter,选择,或点击字符串列表中所选源字符串的左侧图标。

选择:文件->保存,来完成工作。

重复这个过程,直到字符串列表中的所有串标有(接受/正确的)或(接受/警告)标记。然后选择下一个上下文并继续。

选择:查看->统计,可以看原文和译文单词和字符数。

Qt Linguist 介绍和简单应用_第3张图片

 

第三部:

所谓发布翻译,就是使用lrelease工具将ts文件转换输出不包含多余信息的qm文件(qm文件是二进制文件,非文本文件)。

lrelease使用简要说明

  1. 使用方法:

  2. lrelease [选项] 项目文件

  3. lrelease [选项] ts 文件 [-qm qm 文件]

  4. Qt Linguist 介绍和简单应用_第4张图片

-------------------------------------

下面举一个简单的例子,将要翻译成法语和荷兰语两种语言

在.pro中

QT += core
QT -= gui

CONFIG += c++11
QT += widgets
TARGET = arrowPad



TEMPLATE = app

SOURCES += main.cpp \
    arrowpad.cpp \
    mainwindow.cpp

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

HEADERS += \
    arrowpad.h \
    mainwindow.h

#翻译成法语和英语
TRANSLATIONS = arrowpad_fr.ts \
               arrowpad_el.ts

target.path = $$[QT_INSTALL_EXAMPLES]/linguist/arrowPad
INSTALLS += target


#并不是所有的平台都有效
simulator: warning(This example might not fully work on Simulator platform)

DISTFILES += \
    arrowpad_el.qm \
    arrowpad_fr.qm

 在响应的源文件中我们加入四个按钮

 upButton = new QPushButton(tr("&Up"));
       downButton = new QPushButton(tr("&Down"));
       leftButton = new QPushButton(tr("&Left"));
       rightButton = new QPushButton(tr("&Right"));

       QGridLayout *mainLayout = new QGridLayout;
       mainLayout->addWidget(upButton, 0, 1);
       mainLayout->addWidget(leftButton, 1, 0);
       mainLayout->addWidget(rightButton, 1, 2);
       mainLayout->addWidget(downButton, 2, 1);
       setLayout(mainLayout);

 在加入一个菜单

arrowpad = new arrowPad;
    setCentralWidget(arrowpad);

    exitAct = new QAction(tr("E&xit"), this);
    exitAct->setShortcuts(QKeySequence::Quit);
    connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(exitAct);

我们看一下运行结果

 

Qt Linguist 介绍和简单应用_第5张图片

 

加下来我们打开Qt自带的命令行,通过命令进入到执行目录下(这里的简单的进入命令不会的话可以百度)这里我们进入arrowPad我的执行目录

Qt Linguist 介绍和简单应用_第6张图片

这里我们生成了arrowpad_fr.ts 和 arrowpad_el.ts 两个流,分别是法语和荷兰语,然后通过Qt语言家进行翻译,翻译中对应的语言

 Qt Linguist 介绍和简单应用_第7张图片

 

 Qt Linguist 介绍和简单应用_第8张图片

 Qt Linguist 介绍和简单应用_第9张图片

这里翻译成响应的语言,翻译后保存,这里我们也可以看一下翻译结果对不对,加下来我们通过运行lrelease 生成arrowpad_fr.qm和 arrowpad_el.qm (qm文件是二进制文件,非文本文件),我们可以查看,是xml格式

 

通过上面可以判断有没有转换成功,并且也可以查看xml

Qt Linguist 介绍和简单应用_第10张图片

 加下来我们在Qt工程文件加入相应的qm文件,运行分别是法语和荷兰语

Qt Linguist 介绍和简单应用_第11张图片Qt Linguist 介绍和简单应用_第12张图片

源码路径,请点击这里 arrowPid.zip

你可能感兴趣的:(c++,XML,lingnist)