使用 lupdate

命令行工具 lupdate 在 C++ 源、C++ 头文件、Java、Python、QML 和 UI 文件中找到可翻译字符串,并生成或更新 TS 文件。

使用 qmake 进行构建时,请在命令行或 .pro 文件中指定要处理的文件。

使用 CMake 进行构建时,使用 CMake 命令 添加创建或更新 TS 文件并转换为 QM 文件的目标。当构建目标时,lupdate 工具会运行您传递给命令的 选项

有关在项目文件中指定翻译的更多信息,请参阅 本地化应用程序

lupdate 语法

lupdate [options] [project-file]...
lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file

其中

  • 选项 表示一个或多个 lupdate 选项
  • project-file 是项目配置文件。
  • source-file 是包含可翻译字符串的文件。
  • path 是包含翻译源文件的文件夹的路径。
  • @lst-filelst-file读取额外的文件名(每行一个)或包含路径(每行一个,前面带有-I)。
  • ts-files 是要生成或更新的 TS 文件。

要查看最新帮助,请输入

lupdate -help

lupdate 选项

选项操作
-help显示最新帮助信息并退出。
-no-obsolete删除所有已弃用和消失的字符串。
-extensions <ext>[,<ext>]...仅处理具有给定扩展名的文件。在列表中用逗号分隔扩展名。不要使用空白。默认值是:java,jui,ui,c,c++,cc,cpp,cxx,ch,h,h++,hh,hpp,hxx,js,qs,qml,qrc
-pluralonly仅包括复数形式的消息。
-silent不要解释正在执行的操作。
-no-sort不要排序 TS 文件中的上下文。
-no-recursive不要递归扫描目录。
-recursive递归扫描目录(默认)。
-I <includepath> 或 -I<includepath>在此附加位置查找包含文件。您可以指定多个路径。
-locations {absolute|relative|none}指定或覆盖在 TS 文件中保存源代码引用的方式。
  • absolute 表示源文件路径相对于目标文件,但行号是绝对的。
  • relative 表示源文件路径相对于目标文件。行号相对于同一源文件中的其他条目是相对的。
  • none 不存储源位置信息。

如果不指定位置,lupdate将从现有的TS文件中确定它。新文件默认值为absolute

-no-ui-lines不记录UI文件引用中的行号。
-disable-heuristic {sametext|similartext}禁用命名合并启发式算法。可以多次指定。
-project <filename>包含项目描述的JSON格式文件的名称。您可以使用lprodump工具从.pro文件生成该文件。
-pro <filename>包含.pro文件语法但具有其他扩展名的文件名称。将递归到这些文件中并进行合并。此选项已被弃用。请改用lupdate-pro工具。
-pro-out <directory>处理后续.pro文件的虚拟输出目录。
-pro-debug跟踪处理.pro文件。指定两次以增大详细程度。
-source-language <language>[_<region>]指定新文件源字符串的语言。默认为POSIX,如果没有指定。
-target-language <language>[_<region>]指定新文件翻译的语言。如果不指定语言,lupdate将从文件名中确定它。
-tr-function-alias <function>{+=,=}<alias>[,<function>{+=,=}<alias>]...使用+=,将<alias>识别为<function>的另一种拼法。使用=,将<alias>识别为<function>的唯一拼法。

支持的<function>值(及其目前定义的别名单)有

  • Q_DECLARE_TR_FUNCTIONS (=Q_DECLARE_TR_FUNCTIONS)
  • QT_TR_N_NOOP (=QT_TR_N_NOOP)
  • QT_TRID_N_NOOP (=QT_TRID_N_NOOP)
  • QT_TRANSLATE_N_NOOP (=QT_TRANSLATE_N_NOOP)
  • QT_TRANSLATE_N_NOOP3 (=QT_TRANSLATE_N_NOOP3)
  • QT_TR_NOOP (=QT_TR_NOOP)
  • QT_TRID_NOOP (=QT_TRID_NOOP)
  • QT_TRANSLATE_NOOP (=QT_TRANSLATE_NOOP)
  • QT_TRANSLATE_NOOP3 (=QT_TRANSLATE_NOOP3)
  • QT_TR_NOOP_UTF8 (=QT_TR_NOOP_UTF8)
  • QT_TRANSLATE_NOOP_UTF8 (=QT_TRANSLATE_NOOP_UTF8)
  • QT_TRANSLATE_NOOP3_UTF8 (=QT_TRANSLATE_NOOP3_UTF8)
  • findMessage (=findMessage)
  • qtTrId (=qtTrId)
  • tr (=tr)
  • trUtf8 (=trUtf8)
  • translate (=translate)
  • qsTr (=qsTr)
  • qsTrId (=qsTrId)
  • qsTranslate (=qsTranslate)
-ts <ts-file>...指定输出文件。这将覆盖TRANSLATIONS
-version显示lupdate的版本并退出。
-clang-parser [compilation-database-dir]使用clang来解析.cpp文件。否则,使用自定义解析器。此选项需要一个要解析的文件的clang编译数据库(compile_commands.json)。在命令行上,在-clang-parser选项之后直接或在使用项目文件中指定包含此文件的目录的路径。

当使用-qmake时,在.pro文件中设置LUPDATE_COMPILE_COMMANDS_PATH变量。

命令行上指定的目录具有优先权。如果您未指定路径,lupdate将在第一个输入文件的所有父路径中搜索编译数据库。

-project-roots <directory>...指定一个或多个项目根目录。使用-clang-parser选项时,仅将项目根目录下的文件考虑用于翻译。

示例

使用 lupdate 与 CMake

在 CMake 构建时,使用 CMake 命令 将目标翻译添加到 CMakeLists.txt 文件中,然后构建目标。

选择以下选项之一

构建一个目标(例如,app_lupdate),以更新该目标的 .ts 文件。要更新所有目标的 .ts 文件,请构建目标 update_translations

使用 lupdate 与 qmake

为单个 QML 文件生成翻译文件

lupdate main.qml -ts main_en.ts

为其他语言创建翻译文件,例如,将 main_en.ts 复制到 main_fr.ts 中,并翻译法语 TS 文件中的字符串。

lupdate 会处理列在 .qrc 文件中的 QML 文件

RESOURCES += qml.qrc

让所有 QML 文件都通过 lupdate 处理

lupdate application.qrc -ts myapp_en.ts

不使用 .qrc 文件处理所有 QML 文件

lupdate -extensions qml -ts myapp_en.ts

检查 QML 和 C++ 源文件中的可翻译字符串

lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts

生成不指定项目文件中语言的 .ts 文件,将用于英语和法语

lupdate qml.qrc filevalidator.cpp -ts myapp_en.ts myapp_fr.ts

将 TS 文件提供给使用 Qt Linguist 的翻译者,以阅读文件并插入翻译。

XLIFF 格式文件

TS 文件格式是一种简单的可读 XML 格式,您可以使用版本控制系统。此外,lupdate 可以处理本地化交换文件格式(XLIFF)文件(.xlf)。

注意:目前仅支持 XLIFF 1.1 和 1.2 版本。

您可以在 Qt Linguist 中打开和编辑 XLIFF 文件。

© 2024 The Qt Company Ltd. 本文档的贡献包含其各自所有者的版权。本文档是根据 Free Software Foundation 发布的 GNU 自由文档许可证版本 1.3 的条款提供的。Qt 及其相关标志是 The Qt Company Ltd 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。