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

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

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

此附加组件需在 Weblate 服务器上进行附加配置。 LOCALIZE_CDN_PATH 配置生成的文件(在文件系统中)的写入位置, LOCALIZE_CDN_URL 定义从何处提供这些文件(URL)。Weblate 本身不提供这些文件,你必须设置外部源(通常使用 CDN 服务)。

此附加组件在 Hosted Weblate`上配置并通过 ``https://weblate-cdn.com/` 提供文件。

配置 Weblate 内容分发网络附加组件 , 使用 Weblate CDN 翻译 HTML 和 JavaScript , Weblate 内容分发网络的字符串提取 , 使用 Weblate 内容分发网络对 HTML 进行本地化操作

移除空白字符串 #

在 4.4 版本加入.

附加组件 ID :

weblate.cleanup.blank

此附加组件无配置。

触发器 :

仓库提交后,仓库更新后

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

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

Weblate 除了更新翻译,还更新翻译文件吗?

清理翻译文件 #

附加组件 ID :

weblate.cleanup.generic

此附加组件无配置。

触发器 :

仓库提交前,仓库更新后

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

Weblate 除了更新翻译,还更新翻译文件吗?

添加缺少的语言 #

附加组件 ID :

weblate.consistency.languages

此附加组件无配置。

触发器 :

每天,添加仓库后

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

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

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

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

部件发现 #

附加组件 ID :

weblate.discovery.discovery

match

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

file_format

name_template

自定义部件名称

base_file_template

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

双语翻译文件请留空。

new_base_template

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

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

intermediate_template

中间语言文件

中间翻译文件的文件名。在大多数情况下,这是开发者提供的翻译文件,用于创建实际的源字符串。

language_regex

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

copy_addons

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

remove

删除不存在文件的部件

confirm

我确认上述匹配是正确的

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

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

匹配翻译文件的正则表达式必须包含两个命名组以匹配部件和语言,所有正则表达式的命名组均可用作模板字段中的变量。

您可以在所有文件名字段中使用 Django 模板标记,例如:

{{ component }}

部件文件名匹配

{{ component|title }}

首字母大写的部件文件名

{{ path }}: {{ component }}

来自正则表达式的自定义匹配群

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

部件发现示例 #

每种语言一个文件夹 #

每种语言各使用一个文件夹并在其中包含相应部件的翻译文件。

正则表达式:

(?P<language>[^/.]*)/(?P<component>[^/]*)\.po

匹配文件:
  • cs/application.po

  • cs/website.po

  • de/application.po

  • de/website.po

  • 存储 gettext PO 文件时使用常用结构。

    正则表达式:

    locale/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po

    匹配文件:
    • locale/cs/LC_MESSAGES/application.po

    • locale/cs/LC_MESSAGES/website.po

    • locale/de/LC_MESSAGES/application.po

    • locale/de/LC_MESSAGES/website.po

    • 在路径和文件名中使用的语言名称。

      正则表达式:

      locale/(?P<language>[^/.]*)/(?P<component>[^/]*)/(?P=language)\.po

      匹配文件:
      • locale/cs/application/cs.po

      • locale/cs/website/cs.po

      • locale/de/application/de.po

      • locale/de/website/de.po

      • Android 资源字符串,分成几个文件。

        正则表达式:

        res/values-(?P<language>[^/.]*)/strings-(?P<component>[^/]*)\.xml

        匹配文件:
        • res/values-cs/strings-about.xml

        • res/values-cs/strings-help.xml

        • res/values-de/strings-about.xml

        • res/values-de/strings-help.xml

        • 有 Java 属性翻译的多模块 Maven 项目。

          正则表达式:

          (?P<originalHierarchy>.+/)(?P<component>[^/]*)/src/main/resources/ApplicationResources_(?P<language>[^/.]*)\.properties

          部件名称:

          {{ originalHierarchy }}: {{ component }}

          匹配文件:
          • parent/module1/submodule/src/main/resources/ApplicationResources_fr.properties

          • parent/module1/submodule/src/main/resources/ApplicationResource_es.properties

          • parent/module2/src/main/resources/ApplicationResource_de.properties

          • parent/module2/src/main/resources/ApplicationResource_ro.properties

          • 部件发现附加组件使用 Weblate 内部网址 。这是在多个部件之间共享版本控制系统设置的便捷方式。链接的部件使用主部件的本地仓库,其设置方法是将 weblate://project/main-component 填入各部件的 源代码仓库 字段(在 管理 设置 版本控制系统 )。这也节省了配置和系统资源的时间。

            模板标记 , import_project

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

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

            自动给新字符串添加标签 #

            NOT has:label

            要添加的标签

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

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

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

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

            使用可变部分可以寻找那些在本地化后可能不适合用户界面的字符串-它根据源字符串的长度来扩展文本。可变部分是以文本的长度乘以乘数来重复的。例如 Hello world 带有可变后缀 _``和变量乘数1将变为``Hello world___________ - 后缀在源字符串中的每个字符后都重复一次。

            将使用以下模式生成字符串:

            固定字符串前缀 可变字符串前缀 源字符串 可变字符串后缀 固定字符串后缀

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

            您可以使用此附加组件来开始翻译到现有语言或类似语言的新语言环境。将翻译添加到部件后,请遵循附加组件。 示例: 如果您有 fr 的翻译并想开始翻译 fr_CA ,只需将 fr 设置为源,将 fr_CA 设置为目标,并将前缀和后缀留空。

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

            在注释中添加贡献信息 #

            附加组件 ID :

            weblate.gettext.authors

            此附加组件无配置。

            触发器 :

            仓库预提交

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

            PO 文件标头如下所示:

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

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

            可用选项:

            77 – 在 77 个字符和换行符处换行(xgettext 默认)

            65535 – 只在换行符处换行(如’xgettext –no-wrap’)

            -1 – 不换行

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

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

            Weblate 除了更新翻译,还更新翻译文件吗?

            挤压 Git 提交#

            附加组件 ID:

            weblate.git.squash

            squash

            可用选项:

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

            language – 按语言

            file – 按文件

            author – 按作者

            append_trailers

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

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

            commit_message

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

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

            可以选择使用自定义提交说明覆盖原始提交说明。

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

            自定义 JSON 输出#

            附加组件 ID:

            weblate.json.customize

            sort_keys

            对 JSON 键值排序

            indent

            JSON 缩进

            style

            JSON 缩进风格

            可用选项:

            spaces – 空格

            tabs – 制表符

            从附加组件执行脚本#

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

            # SPDX-License-Identifier: GPL-3.0-or-later """Example pre commit script.""" from django.utils.translation import gettext_lazy 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 description verbose = gettext_lazy("Execute script before commit") description = gettext_lazy("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"

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

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

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

            WL_VCS#

            使用的版本控制系统。

            更新后仓库处理#

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

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

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