本页内容

使用 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

其中:

  • options 表示一个或多个lupdate 选项。
  • project-file 是项目配置文件。
  • source-file 是一个包含可翻译字符串的文件。
  • path 是包含翻译源文件的文件夹路径。
  • @lst-file 从lst-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 文件中的上下文进行排序。
-sort-messages在 TS 文件中按字母顺序对上下文中的消息进行排序。
-no-recursive不递归扫描目录。
-recursive递归扫描目录(默认)。
-warnings-are-errors将警告视为错误。
-I <includepath> or -I<includepath>在此附加位置查找包含文件。您可以指定多个路径。
-locations {absolute|relative|none}指定或覆盖在 TS 文件中保存源代码引用方式。
  • absolute 表示源文件路径相对于目标文件,但行号是绝对的。
  • relative 表示源文件路径相对于目标文件,但行号是绝对的。行号相对于同一源文件中的其他条目。
  • none 不存储任何关于源文件位置的信息。

如果您未指定位置,lupdate 将根据现有的 TS 文件确定该位置。新文件的默认值为absolute 。

-no-ui-lines在引用 UI 文件时,不记录行号。
-disable-heuristic {sametext|similartext}禁用命名合并启发式算法。该选项可多次指定。
-project <filename>包含项目描述(JSON 格式)的文件名称。您可以使用lupdate-pro -dump-json <file> 从 .pro 文件生成该文件。
-pro <filename>.pro 文件的名称。适用于采用 .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 的版本信息并退出。

示例

在 CMake 中使用 lupdate

使用 CMake 进行构建时,请通过CMake 命令在 CMakeLists.txt 文件中为各目标添加翻译,然后构建这些目标。

请选择以下选项之一:

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

在 qmake 中使用 lupdate

要为单个 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

若要处理当前工作目录(或其子文件夹)中的所有 QML 文件,且不使用.qrc 文件:

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 文件。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.