附加组件

2.19 新版功能.

附加组件提供了自定义翻译工作流的方法。它们可以被安装在翻译组件视图中,并在幕后工作。管理员可从各翻译组件的:图形用户界面标签: ‘ 管理 ‘↓’附加组件’菜单中管理它们。

../_images/addons.png

内置插件

自动化翻译

3.9 新版功能.

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

当组件中出现新字符串时,会自动触发此附加组件。

JavaScript本地化CDN

4.2 新版功能.

添加用于JavaScript或 HTML本地化的本地化CDN。

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

在安装时,插件为你的组件产生唯一的 URL ,可以将其包括在 HTML 文件中,使它们本地化。细节请参见 weblate-cdn

清理翻译文件

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

语言一致性

确保一个项目中的所有组件都为每种要添加的语言进行翻译。

它对未添加到组件中的语言建立空的翻译。

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

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

提示

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

组件发现

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

每次版本控制系统( VCS )升级时触发,否则与 import_project 管理命令相似。这种方式可以在一个版本控制系统( VCS )中跟踪多个翻译组件。

建立一个至少未来不大可能会消失的主要组件,其他会采用其 Weblate internal URLs 作为版本控制系统( VCS )的配置,并且配置它来找到其中的所有组件。

匹配是使用正则表达式完成的,在正则表达式中,强大的功能是配置复杂性的一种折衷。一些常见用例的例子可以在附加组件帮助部分找到。

一旦点击了 Save ,将显示匹配组件的预览,可以检查配置是否匹配于自己的需要:

../_images/addon-discovery.png

参见

模板标记

批量编辑

3.11 新版功能.

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

新字符串自动贴标签会有用(通过搜索查询 NOT has:label 开始,并且添加所需要的标签,直到所有的字符串都适当地被贴上标签)。还以对 Weblate 元数据执行其他任何自动化操作。

参见

批量编辑

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

3.1 新版功能.

每当新的翻译字符串从版本控制系统( VCS )中导入时,它将在 Weblate 中被标记为需要编辑。这对于包含全部字符串的文件格式十分有用,即使它们没有被翻译。

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

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

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

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

统计数据生成器

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

可以在文件名和内容中使用 Django 模板,参见 模板标记 的具体标记表述。

例如对每个翻译产生摘要文件:

所生成文件的名称

locale/{{ language_code }}.json

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

参见

模板标记

在注释中添加贡献信息

在 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 变量

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

自定义 gettext 输出

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

提供了后面的选项:

  • 在 77 个字符处和新一行时来换行

  • 仅在换行符处折行

  • 不换行

注解

默认 gettext 在 77 个字符处和新一行时换行。使用 --no-wrap 参数时只在新一行时换行。

更新 LINGUAS 文件

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

生成 MO 文件

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

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

使用 msgmerge 更新所有的 PO 文件以匹配 POT 文件。会在每次拉取上游代码库的更新时触发。

压缩 Git 提交

推送变更之前压缩 Git 提交。

可以选择后面的模式之一:

3.4 新版功能.

  • 所有提交成一个

  • 每种语言

  • 每个文件

3.5 新版功能.

  • 每个作者

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

4.1 新版功能.

原始提交信息可选地由定制的提交信息覆盖。

预告(提交行像 Co-authored-by: ... )可选地从原始提交信息中去掉,并且添加在去掉的提交信息后面。这还可以为每一位翻译者产生适当的 Co-authored-by: 信誉。

自定义 JSON 输出

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

格式化 Java 属性文件

排序 Java 属性文件。

陈旧注释删除

3.7 新版功能.

设置删除注释的时间。

这可以用于删除可能变得过时的陈旧注释。小心使用,因为陈旧的注释不意味着失去了重要性。

陈旧建议删除

3.7 新版功能.

设置删除建议的时间。

可以用于连接建议投票(请参见 同行评审 ),将给定时间内没有得到足够积极票数的建议删除。

更新 RESX 文件

3.9 新版功能.

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

提示

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

自定义 YAML 输出

3.10.2 新版功能.

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

定制附加组件列表

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

编写附加组件

你也可以编写自己的附加组件,所需要做的是子类 BaseAddon ,定义附加组件的元数据,并实现一个会执行处理的回调。

这里是一个插件的例子:

#
# Copyright © 2012 - 2020 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/>.
#


from django.utils.translation import gettext_lazy as _

from weblate.addons.base import BaseAddon
from weblate.addons.events import EVENT_PRE_COMMIT


class ExampleAddon(BaseAddon):
    # Filter for compatible components, every key is
    # matched against property of component
    compat = {"file_format": {"po", "po-mono"}}
    # List of events addon should receive
    events = (EVENT_PRE_COMMIT,)
    # Addon unique identifier
    name = "weblate.example.example"
    # Verbose name shown in the user interface
    verbose = _("Example addon")
    # Detailed addon description
    description = _("This addon does nothing it is just an example.")

    # Callback to implement custom behavior
    def pre_commit(self, translation, author):
        return

从附加组件执行脚本

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

#
# Copyright © 2012 - 2020 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 addon 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

当前组件的Filemask。

WL_TEMPLATE

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

WL_NEW_BASE

2.14 新版功能.

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

WL_FILE_FORMAT

当前组件使用的文件格式。

WL_LANGUAGE

当前处理的翻译语言(对于组件水平的 hook 不可获得)。

WL_PREVIOUS_HEAD

之前更新上的 HEAD (只有当运行过去的更新 hook 时可获得)。

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

翻译的预提交处理

使用提交脚本在提交给仓库前自动地对翻译做出更改。

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