附加组件

2.19 新版功能.

附加组件提供了自定义和自动化翻译工作流程的方法。管理员可以从每个相应翻译部件的 ManageAddons 菜单添加和管理附加组件。

提示

您也可以使用 APIDEFAULT_ADDONSinstall_addon 来配置附加组件。

../_images/addons.png

内置附加组件

自动化翻译

3.9 新版功能.

附加组件 ID

weblate.autotranslate.autotranslate

配置

mode

自动翻译模式

可用选项:

suggest – 添加为建议

translate – 添加为翻译

fuzzy – 添加为需要编辑

filter_type

搜索筛选器

请注意,翻译所有字符串将丢弃所有现有的翻译。

可用选项:

all – 所有字符串

nottranslated – 未翻译的字符串

todo – 未完成的字符串

fuzzy – 标记为需要编辑的字符串

check:inconsistent – 未通过的检查:不一致

auto_source

自动翻译的来源

可用选项:

others – 其他翻译部件

mt – 机器翻译

component

部件

输入要用作来源的部件,留空则使用当前项目中的所有部件。

engines

机器翻译引擎

threshold

匹配分数阈值

触发器

部件更新,每天

使用机器翻译或其他部件自动翻译字符串。

触发条件:

  • 当部件中出现新字符串时。

  • 每个部件每个月一次,可以使用 BACKGROUND_TASKS 进行配置。

JavaScript 本地化 CDN

4.2 新版功能.

附加组件 ID

weblate.cdn.cdnjs

配置

threshold

翻译阈值

包含的翻译的阈值。

css_selector

CSS选择器

检测可本地化元素的CSS选择器。

cookie_name

语言cookie名称

存储语言选项的cookie的名称。

files

从 HTML 文件中提取字符串

用于解析可翻译字符串的当前存储库中的文件名或远程URLs的列表。

触发器

每日,代码库提交后,代码库更新后

将译文发布到内容分发网络,以便在 JavaScript或 HTML 本地化中使用。

可以用于本地化静态 HTML 网页,或者在 JavaScript 代码中加载本地化文件。

为你的部件生成一个唯一的 URL,你可以将其包含在 HTML 页面中以本地化它们。详情见 使用 Weblate CDN 翻译 HTML 和 JavaScript

移除空白字符串

4.4 新版功能.

附加组件 ID

weblate.cleanup.blank

配置

此附加组件无配置。

触发器

代码库提交后,代码库更新后

从翻译文件中删除没有翻译的字符串.

使用此方法可以使翻译文件中不存在任何空字符串(例如,如果你的本地化库将它们显示为缺失,而不是退回到源字符串)。

清理翻译文件

附加组件 ID

weblate.cleanup.generic

配置

此附加组件无配置。

触发器

代码库提交前,代码库更新后

更新所有翻译文件以匹配单语言译文模版文件。对于大多数文件格式来说,这意味着移除译文模版文件中不再出现的旧翻译条目。

添加缺少的语言

附加组件 ID

weblate.consistency.languages

配置

此附加组件无配置。

触发器

每天,添加代码库后

确保对一个项目内所有部件使用一致的一组语言。

每隔 24 小时,和在 Weblate 中加入新语言时,会检查一次缺失的语言。

不像其他多数附加组件,这个附加组件影响整个项目。

提示

自动化翻译 自动翻译新添加的字符串。

部件发现

附加组件 ID

weblate.discovery.discovery

配置

match

用于匹配翻译文件的正则表达式

file_format

文件格式

name_template

自定义部件名称

base_file_template

指定单语种译文模版文件名

保持双语翻译文件空白。

new_base_template

为新的翻译条目指定译文模版文件

用于创建新翻译的文件名。对于 gettext 格式,请选择 .pot 文件。

language_regex

语言筛选

扫描文件掩码时用于筛选翻译文件的正则表达式。

copy_addons

将主部件的附加组件克隆到新创建的部件

remove

删除不存在文件的部件

confirm

我确认上述匹配是正确的

触发器

代码库更新后

根据版本控制系统中文件更改的情况来自动添加或删除项目部件。

每次更新 VCS 时触发,在其他方面类似 import_project 管理命令。通过这种方式,你可以在一个 VCS 中跟踪多个翻译部件。

该匹配是使用允许复杂配置的正则表达式完成的,但这样做需要一些知识。一些常见用例的例子可以在附加组件帮助部分找到。

点击 Save 后,将显示匹配部件的预览,您可以从中检查配置是否真正符合您的需求:

../_images/addon-discovery.png

提示

组件发现附加组件使用 Weblate internal URLs。 这是在多个组件之间共享 VCS 设置的便捷方式。 链接的组件使用主要组件的本地存储库,通过将 weblate://project/main-component 填入 源代码库 字段(在 Manage ↓ :guilabel: 各个组件的`设置` ↓ 版本控制系统)。 这也节省了配置和系统资源的时间。

参见

模板标记

批量编辑

3.11 新版功能.

附加组件 ID

weblate.flags.bulk

配置

q

查询

state

要设置的状态

可用选项:

-1 – 不要更改

10 – 需要编辑

20 – 已翻译

30 – 已审核

add_flags

要添加的翻译标记

remove_flags

要删除的翻译标记

add_labels

要添加的标签

remove_labels

要删除的标签

触发器

部件更新

批量编辑标记、标签或字符串状态。

从搜索查询 NOT has:label 开始,自动添加标签,然后给搜索查询所得字符串添加标签,直到所有字符串都有所需的标签。还可以对 Weblate 元数据进行其他自动化操作。

例子:

自动给新字符串添加标签

搜索查询

NOT has:label

要添加的标签

近期

应用商店元数据文件 所有更新日志字符串标记为只读

搜索查询

language:en AND key:changelogs/

要添加的翻译标记

read-only

将未更改的译文标记为“需要编辑”

3.1 新版功能.

附加组件 ID

weblate.flags.same_edit

配置

此附加组件无配置。

触发器

单元创建后

每当从 VCS 导入新的可翻译字符串并与源字符串匹配时,就会在 Weblate 中标记为需要编辑。对于包含未翻译字符串的源字符串的文件格式尤其有用。

提示

您可能还想通过在 翻译标记 中添加 strict-same 标记来加强 未更改的翻译 检查。

参见

翻译状态

将新的源字符串标记为“需要编辑”

附加组件 ID

weblate.flags.source_edit

配置

此附加组件无配置。

触发器

单元创建后

每当一个新的源字符串从版本控制系统(VCS)中导入时,它将在 Weblate 中被标记为需要编辑。这样就可以简单地筛选并编辑开发者编写的源字符串。

参见

翻译状态

将导入的新译文标记为“需要编辑”

附加组件 ID

weblate.flags.target_edit

配置

此附加组件无配置。

触发器

单元创建后

每当一个新的可翻译字符串从版本控制系统(VCS)中导入时,它将在 Weblate 中被标记为需要编辑。这样就可以简单地筛选并编辑开发者创建的翻译。

参见

翻译状态

统计数据生成器

附加组件 ID

weblate.generate.generate

配置

filename

所生成文件的名称

template

所生成文件的内容

触发器

代码库预提交

生成一个包含关于翻译状态详细信息的文件。

你可以在文件名和内容中使用 Django 模板,详细的标记说明请参见 模板标记

例如为每个翻译生成一个摘要文件:

所生成文件的名称

locale/{{ language_code }}.json

内容
{
   "language": "{{ language_code }}",
   "strings": "{{ stats.all }}",
   "translated": "{{ stats.translated }}",
   "last_changed": "{{ stats.last_changed }}",
   "last_author": "{{ stats.last_author }}",
}

参见

模板标记

用原文预填充翻译

4.11 新版功能.

附加组件 ID

weblate.generate.prefill

配置

此附加组件无配置。

触发器

部件更新,每天

用源字符串填充翻译字符串。

部件中所有未翻译的字符串将被填充为源字符串,并被标记为需要编辑。当你的翻译文件中不能兼容空字符串时请使用这个功能。

假语言环境 (Pseudolocale)生成

4.5 新版功能.

附加组件 ID

weblate.generate.pseudolocale

配置

source

源字符串

target

目标翻译

prefix

字符串前缀

suffix

字符串后缀

触发器

部件更新,每天

通过向源字符串添加前缀和后缀自动生成翻译。

伪 locale 对于查找未准备好进行本地化的字符串很有用。这是通过修改所有可翻译的源字符串来实现的,使得在用伪 locale 语言运行应用程序时很容易发现未修改的字符串。

也可以查找其本地化对应项可能不适合布局的字符串。

提示

可以使用真正的语言进行检测,但在 Weblate 中有专用的假语言环境——en_XAar_XB

提示

You can use this add-on to start translation to a new locale of an existing language or similar language. Once you add the translation to the component, follow to the add-on. Example: If you have fr and want to start fr_CA translation, simply set fr as the source, fr_CA as the target, and leave the prefix and suffix blank.

一旦您有新的翻译填重,请卸载附加组件,以防止 Weblate 更改复制后的翻译。

在注释中添加贡献信息

附加组件 ID

weblate.gettext.authors

配置

此附加组件无配置。

触发器

代码库预提交

更新 PO 文件标头的注释部分,以包含贡献者名字和贡献年份。

PO 文件标头如下所示:

# Michal Čihař <michal@cihar.com>, 2012, 2018, 2019, 2020.
# Pavel Borecki <pavel@example.com>, 2018, 2019.
# Filip Hron <filip@example.com>, 2018, 2019.
# anonymous <noreply@weblate.org>, 2019.

更新“配置文件”中的 ALL_LINGUAS 变量

附加组件 ID

weblate.gettext.configure

配置

此附加组件无配置。

触发器

添加代码库后,每天

当新的翻译添加时,更新 configureconfigure.in 或任何 configure.ac 文件中的 ALL_LINGUAS 变量。

自定义 gettext 输出

附加组件 ID

weblate.gettext.customize

配置

width

自动换行

默认情况下 gettext 会在每行第 77 个字符处与换行符处换行。添加 –no-wrap 参数后,换行只在换行符处发生。

可用选项:

77 – 在 77 个字符处和换行符处换行

65535 – 仅在换行符处换行

-1 – 不换行

触发器

存储延迟加载

允许自定义 gettext 的输出行为,例如是否启用自动换行。

它提供以下选项:

  • 在第 77 个字符处和换行符处换行

  • 仅在换行符处换行

  • 不换行

备注

默认情况下 gettext 会在每行第 77 个字符处与换行符处换行。添加 --no-wrap 参数后,换行只会在换行符处发生。

更新 LINGUAS 文件

附加组件 ID

weblate.gettext.linguas

配置

此附加组件无配置。

触发器

添加代码库后,每天

添加新的翻译时更新 LINGUAS 文件。

生成 MO 文件

附加组件 ID

weblate.gettext.mo

配置

path

生成的 MO 文件的路径

如未指定,将使用 PO 文件对应的位置。

触发器

代码库预提交

为每个变更的 PO 文件自动生成 MO 文件。

生成的 MO 文件的位置可以定制化,并且其字段使用 模板标记

更新 PO 文件以匹配 POT 文件 (msgmerge)

附加组件 ID

weblate.gettext.msgmerge

配置

previous

保持已翻译字符串先前的 msgid

no_location

删除翻译字符串的位置

fuzzy

使用模糊匹配

触发器

代码库更新后

使用 msgmerge 来更新所有的 PO 文件(如 文件掩码 所配置),而与 POT 文件(如 新翻译的译文模版 所配置)匹配。

每当从上游存储库中提取新的更改时都会被触发。多数 msgmerge 命令行选项可通过附加组件配置进行设置。

挤压 Git 提交

附加组件 ID

weblate.git.squash

配置

squash

挤压提交

可用选项:

all – 所有提交并成一个提交

language – 按语言

file – 按文件

author – 按作者

append_trailers

在挤压的提交说明附上尾注

尾注行是类似于 RFC 822 电子邮件标头的行,位于提交说明的其他自由格式部分的末尾,例如 “Co-authored-by…”。

commit_message

提交说明

将使用此提交说明来代替挤压提交的组合提交说明。

触发器

代码库提交后

在推送变更之前挤压 Git 提交。

在推送变更之前,可以通过以下任一模式挤压 Git 提交:

  • 所有提交成一个

  • 每种语言

  • 每个文件

  • 每位作者

原始提交说明保留,但其作者信息丢失,除非选择 Per author ,或者定制提交说明来包括它。

可以选择使用自定义提交说明覆盖原始提交说明。说明选项请参见 模板标记

可以选择从原始提交说明中删除尾注(像 Co-authored-by: 这样的提交行),并附在挤压的提交说明的末尾。这也会为每位译者产生合适的 Co-authored-by: 记录。

自定义 JSON 输出

附加组件 ID

weblate.json.customize

配置

sort_keys

对 JSON 键值排序

indent

JSON 缩进

style

JSON 缩进风格

可用选项:

spaces – 空格

tabs – 制表符

触发器

存储延迟加载

允许调整 JSON 的输出行为,例如缩进或排序。

格式化 Java 属性文件

附加组件 ID

weblate.properties.sort

配置

此附加组件无配置。

触发器

代码库预提交

排序 Java 属性文件。

陈旧评论删除

3.7 新版功能.

附加组件 ID

weblate.removal.comments

配置

age

要保持的天数

触发器

每天

设置删除评论的时间。

这可以用于删除可能已经过时的陈旧评论。小心使用,因为评论变旧并不意味着它们已经失去了重要性。

陈旧建议删除

3.7 新版功能.

附加组件 ID

weblate.removal.suggestions

配置

age

要保持的天数

votes

投票阈值

移除阈值。当投票被禁用时该项无效果。

触发器

每天

设置删除建议的时间。

此附加组件在与建议投票一道用来删除在给定的时间内没有得到足够的正面投票的建议方面非常有用。

更新 RESX 文件

3.9 新版功能.

附加组件 ID

weblate.resx.update

配置

此附加组件无配置。

触发器

代码库更新后

更新所有翻译文件以匹配上游单语言译文模版文件。未使用的字符串将被删除,新字符串将复制源字符串添加。

提示

如果只想删除陈旧的翻译键,那么使用 清理翻译文件

自定义 YAML 输出

3.10.2 新版功能.

附加组件 ID

weblate.yaml.customize

配置

indent

YAML 缩进

width

自动换行

可用选项:

80 – 在 80 个字符处换行

100 – 在 100 个字符处换行

120 – 在 120 个字符处换行

180 –在 180 个字符处换行

65535 – 不换行

line_break

换行符

可用选项:

dos – DOS (\r\n)

unix – UNIX (\n)

mac – MAC (\r)

触发器

存储延迟加载

允许调整 YAML 的输出,例如自定义缩进或自定义换行。

定制附加组件列表

附加组件列表由 WEBLATE_ADDONS 配置。要添加其他附加组件,只需在这个设置中包含绝对类名称即可。

编写附加组件

你也可以编写自己的附加组件,创建一个 weblate.addons.base.BaseAddon 的子类来定义附加组件元数据,然后实现一个回调来执行处理。

从附加组件执行脚本

附加组件还可以用于执行外部脚本。这曾经集成在 Weblate 中,但现在必须写一些代码,将脚本包裹在附加组件中。

#
# Copyright © 2012–2022 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.
#
"""Example pre commit script."""


from django.utils.translation import gettext_lazy as _

from weblate.addons.events import EVENT_PRE_COMMIT
from weblate.addons.scripts import BaseScriptAddon


class ExamplePreAddon(BaseScriptAddon):
    # Event used to trigger the script
    events = (EVENT_PRE_COMMIT,)
    # Name of the addon, has to be unique
    name = "weblate.example.pre"
    # Verbose name and long descrption
    verbose = _("Execute script before commit")
    description = _("This add-on executes a script.")

    # Script to execute
    script = "/bin/true"
    # File to add in commit (for pre commit event)
    # does not have to be set
    add_file = "po/{{ language_code }}.po"

安装方法请参见 定制的质量检查、附加组件和自动修复

对于任何给定的部件,当前路径设置为版本控制系统(VCS)仓库的根目录时,执行脚本。

此外,以下环境变量是可用的:

WL_VCS

使用的版本控制系统。

WL_REPO

上游仓库 URL 。

WL_PATH

版本控制系统(VCS)仓库的绝对路径。

WL_BRANCH

2.11 新版功能.

当前部件配置的仓库分支。

WL_FILEMASK

当前部件的文件掩码。

WL_TEMPLATE

单语言翻译模板的文件名(可以为空)。

WL_NEW_BASE

2.14 新版功能.

建立新的翻译所使用文件的文件名(可以为空)。

WL_FILE_FORMAT

用于当前部件的文件格式。

WL_LANGUAGE

当前处理的翻译的语言(对于部件级别的钩子不可用)。

WL_PREVIOUS_HEAD

更新后的上个 HEAD (仅在运行更新后钩子后可用)。

WL_COMPONENT_SLUG

3.9 新版功能.

部件标识串用于构建 URL 。

WL_PROJECT_SLUG

3.9 新版功能.

项目标识串用于构建 URL 。

WL_COMPONENT_NAME

3.9 新版功能.

部件名称。

WL_PROJECT_NAME

3.9 新版功能.

项目名称。

WL_COMPONENT_URL

3.9 新版功能.

部件 URL 。

WL_ENGAGE_URL

3.9 新版功能.

项目参与 URL 。

参见

部件配置

更新后存储库处理

可用于在 VCS 上游源更改时更新翻译文件。为了实现这个功能,请记住 Weblate 只能看到提交给版本控制系统(VCS)的文件,所以您需要将更改作为脚本的一部分提交。

例如,使用 Gulp,您可以使用以下代码来实现:

#! /bin/sh
gulp --gulpfile gulp-i18n-extract.js
git commit -m 'Update source strings' src/languages/en.lang.json

翻译的预提交处理

在将翻译提交到存储库之前,使用 commit 脚本自动更改翻译。

它作为组成当前翻译文件名的单一参数而通过。