Featured image of post Qt lconvert 工具介绍

Qt lconvert 工具介绍

lconvert 是 Qt 的 Linguist 工具链的一部分。 它可以用于转换和过滤翻译数据文件的独立工具。

介绍

lconvert 是 Qt 的 Linguist 工具链的一部分。 它可以用于转换和过滤翻译数据文件的独立工具。

用法:

1
lconvert [options] <infile> [<infile>...]

支持以下文件格式:

  • qm:编译后的 Qt 翻译
  • pot:GNU Gettext 本地化模板文件
  • qph:Qt Linguist 短语手册
  • ts:Qt 翻译源
  • po:GNU Gettext 本地化文件
  • xlf:XLIFF 本地化文件

如果指定了多个输入文件,它们将被合并以后文件的翻译优先。

选项:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-H
-help 帮助

-i <infile>
-input-file <infile>
      指定输入文件。 如果 <infile> 可能以破折号开头。
      该选项可以多次使用来合并输入。
      可以是“-”(标准输入),用于管道中。

-o <outfile>
-output-file <outfile>
      指定输出文件。 默认为“-”(标准输出)。

-if <informat>
-input-format <format>
      指定后续 <infile> 的输入格式。
      格式是根据文件名自动检测的,默认为“ts”。

-of <outformat>
-output-format <outformat>
      指定输出格式。见 -if。

-drop-tags <regexp>
      写入 TS 或 XLIFF 文件时删除命名的额外标签。
      可以重复指定。

-drop-translations
      删除现有翻译并将状态重置为“未完成”。
      注意:这意味着 --no-obsolete。

-source-language <language>[_<region>]
      指定/覆盖源字符串的语言。 如果未指定且文件尚未命名
      则默认为 POSIX 。

-target-language <language>[_<region>]
      指定/覆盖翻译的语言。
      如果未指定此选项并且文件内容名称还没有语言,则将从文件名猜测目标语言。

-no-obsolete
      删除过时的消息。

-no-finished
      删除已完成的消息。

-no-untranslated
      删除未翻译的消息。

-sort-contexts
      按字母顺序对输出 TS 文件中的上下文进行排序。

-locations {absolute|relative|none}
      覆盖源代码引用在 TS 文件中的保存方式。
      默认是绝对的。

-no-ui-lines
      从 UI 文件的引用中删除行号。

-verbose
      详细一点

长选项也可以仅用一个前导破折号来指定。

返回值:

  • 0 表示成功
  • 1 命令行解析失败
  • 2 读取失败
  • 3 写入失败

用例

假设有如下 ts 文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>MainWindow</name>
    <message>
        <location filename="mainwindow.ui" line="14"/>
        <source>MainWindow</source>
        <translation>主窗口</translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="21"/>
        <source>按钮</source>
        <translation>按钮</translation>
    </message>
    <message>
        <location filename="mainwindow.ui" line="28"/>
        <source>按钮2</source>
        <translation></translation>
    </message>
    <message>
        <location filename="mainwindow.cpp" line="16"/>
        <location filename="mainwindow.cpp" line="25"/>
        <source>English text</source>
        <translation>英文文本</translation>
    </message>
    <message>
        <location filename="mainwindow.cpp" line="14"/>
        <location filename="mainwindow.cpp" line="20"/>
        <source>Chinese text</source>
        <translation>中文文本</translation>
    </message>
</context>
</TS>

去掉UI文件的行号

1
lconvert lan_zh.ts -no-ui-lines -o lan_zh_n.ts

输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>MainWindow</name>
    <message>
        <location filename="mainwindow.ui"/>
        <source>MainWindow</source>
        <translation>主窗口</translation>
    </message>
    <message>
        <location filename="mainwindow.ui"/>
        <source>按钮</source>
        <translation>按钮</translation>
    </message>
    <message>
        <location filename="mainwindow.ui"/>
        <source>按钮2</source>
        <translation></translation>
    </message>
    <message>
        <location filename="mainwindow.cpp" line="16"/>
        <location filename="mainwindow.cpp" line="25"/>
        <source>English text</source>
        <translation>英文文本</translation>
    </message>
    <message>
        <location filename="mainwindow.cpp" line="14"/>
        <location filename="mainwindow.cpp" line="20"/>
        <source>Chinese text</source>
        <translation>中文文本</translation>
    </message>
</context>
</TS>

可以看到,仅是.ui文件的行号被去掉了,而代码里的行号并没有去掉。

去掉行号

可以使用 -locations none 参数将 ts 中 location 去掉,就没有行号了

1
lconvert -locations none lan_zh.ts -o lan_zh_n.ts

输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<context>
    <name>MainWindow</name>
    <message>
        <source>MainWindow</source>
        <translation>主窗口</translation>
    </message>
    <message>
        <source>按钮</source>
        <translation>按钮</translation>
    </message>
    <message>
        <source>按钮2</source>
        <translation></translation>
    </message>
    <message>
        <source>English text</source>
        <translation>英文文本</translation>
    </message>
    <message>
        <source>Chinese text</source>
        <translation>中文文本</translation>
    </message>
</context>
</TS>

弊端:Qt linguist 工具将无法查看对应的源码位置。

Licensed under CC BY-NC-SA 4.0