翻译项目

翻译组织

Weblate 将项目/部件的可翻译版本控制系统内容组织成树状结构。你还可以使用类别来组织项目内的部件。

  • 底层对象是 项目配置,该项目配置应将所有翻译归在一起(例如,多个版本的应用程序翻译和/或随附的文档)。

  • 你可以选择通过 :ref:`category`创建该中间级别。可以嵌套类别来实现更复杂的结构。

  • 在上面的级别上,即 部件配置,实际上是要翻译的部件,您定义要使用的版本控制系统仓库以及要翻译的文件掩码。

  • 部件配置 上方有单独的翻译,当版本控制系统仓库中出现翻译文件(与 部件配置 中定义的 文件掩码 匹配)时,Weblate 会自动处理这些翻译。

Weblate 支持 Translate Toolkit 支持的多种翻译格式(双语和单语),请参阅 支持的文件格式

备注

您可以使用 Weblate 内部网址 共享克隆的版本控制系统仓库。当您有许多共享同一版本控制系统的部件时,强烈推荐使用此功能。它提高了性能并减少了所需的磁盘空间。

添加翻译项目和部件

根据你的权限,可以创建新的翻译项目和部件。具备 Add new projects 权限的用户总是可以这么做。如果你的实例使用付费托管(如 https://hosted.weblate.org/,请参见 账单),你还可以从管理账单的用户账户基于套餐限额创建它们。

提示

要授予每名用户创建新项目的权限,请为 Project creators 团队创建新的 自动团队分配

您可以在单独的页面上查看当前的付费套餐:

../_images/user-billing.webp

您可以从此处开始创建项目,也可以使用导航栏中的菜单来填写翻译项目的基本信息以完成添加:

../_images/user-add-project.webp

创建项目后,您将直接进入项目页面:

../_images/user-add-project-done.webp

只需单击一次即可启动创建新翻译部件的操作。创建部件的过程是多阶段的,并自动检测大多数翻译参数。有几种创建部件的方法:

从版本控制

从远程版本控制仓库创建部件。

从现有部件

通过选择不同的文件为现有部件创建其他部件。

其他分支

仅针对不同分支,为现有部件创建其他部件。

上传翻译文件

如果您没有版本控制或不想将其与 Weblate 集成,则将翻译文件上传到 Weblate。您以后可以使用网络界面或 Weblate 的 REST API 更新内容。

翻译文档

上传单个文档或翻译文件并进行翻译。

从头开始

创建空白翻译项目并手动添加字符串。

一旦有了现有的翻译部件,就可以使用同一仓库轻松地为其他文件或分支添加新的部件。

首先,您需要填写名称和仓库位置:

../_images/user-add-component-init.webp

在下一页上,将显示已发现的可翻译资源的列表:

../_images/user-add-component-discovery.webp

最后,您检查翻译部件信息并填写可选详细信息:

../_images/user-add-component.webp

项目配置

创建一个翻译项目,然后在其中添加一个新的翻译部件。这个项目就像一个架子,里面堆放着真正的翻译。同一项目中的所有部件共享建议及其字典;翻译也将自动传播到单个项目中的所有部件(除非在部件配置中关闭),请参见 翻译记忆库

这些基本属性被新建并通知翻译人员项目:

项目名称

详细的项目名称,用于显示项目名称。

URL 标识串

适用于 URL 的项目名称。

项目网站

译者可以在其中找到有关该项目的更多信息的 URL。

这是一个必须的参数,除非通过 :setting:`WEBSITE_REQUIRED`关闭。

翻译说明

描述项目中的本地化过程的文本,以及任何其他对翻译人员有用的信息。Markdown可用于文本格式化或插入链接。

设置 “Language-Team” 标头

Weblate 是否应该管理 Language-Team 标头(目前这是一个 GNU gettext PO (Portable Object) 独占功能)。

使用共享的翻译记忆库

是否使用共享翻译记忆库,有关更多详细信息,请参见 共享翻译记忆库

可以通过 DEFAULT_SHARED_TM 更改默认值。

贡献到共享的翻译记忆库

是否贡献到共享翻译记忆库,请参阅 共享翻译记忆库 以获取更多详细信息。

这也影响项目能否被用作 自动翻译 的来源。

可以通过 DEFAULT_SHARED_TM 更改默认值。

备注

此选项在 Hosted Weblate 中不可用。开启/关闭该选项会同时打开/关闭 使用共享的翻译记忆库

访问控制

配置每个项目的访问控制,请参阅 项目访问控制 以获取更多详细信息。

可以通过 DEFAULT_ACCESS_CONTROL 更改默认值。

启用审校

允许复核翻译的工作流程,请参见 专门的审校员

启用原文审校

允许复核源字符串的工作流程,请参见 源字符串复查

启用钩子

是否将未经身份验证的 通知钩子 用于此仓库。

语言别名

将翻译导入到Weblate时定义语言代码映射。当您的仓库中的语言代码不一致,并且您希望在Weblate中获得一致的视图,或者如果您想使用翻译文件的非标准命名时,可以使用此方法。

典型的使用情况会是将 美国英语映射到英语:en_US:en

由逗号分隔的多个映射:en_GB:en,en_US:en

使用非标准代码:ia_FOO:ia

提示

当匹配翻译文件时映射语言代码,并且映射是大小写敏感的,所以您确保使用与文件名中使用的形式相同的源语言代码。

部件配置

部件是用于翻译的内容的分组。您输入版本控制系统仓库位置和想要翻译那个文件的掩码,Weblate 会自动地从 这个版本控制系统中取回,并找到所有匹配的翻译文件。

您可以在 支持的文件格式 中找到一些典型配置的示例。

备注

建议将翻译部件保持在合理的规模——将翻译分成对你有意义的部分(单个应用程序或附加组件、书籍章节或网站)。

Weblate 可以轻松处理有 10000 多条字符串的翻译,但对于如此庞大的翻译部件,译者之间的分工和协调更为困难。

如果翻译的语言定义丢失,会新建一个空的定义,并且命名为 “cs_CZ (generated)”。您应该调整定义,并将其反馈给 Weblate 的作者,从而丢失的语言可以包括在下一次的发布版本中。

使用版本控制系统工作的所有重要参数都包含在部件中,并且从中取出翻译:

部件名称

冗长部件名称,用于显示部件的名称。

部件标识串

适用于 URL 的部件名称。

部件项目

部件所属的 项目配置

版本控制系统

使用的版本控制系统,细节请参见: 版本控制集成

源代码仓库

版本控制系统仓库,用于拉取更改。

参见

指定 URL 的更多细节请参见 访问仓库

提示

这可以是真实的版本控制系统的 URL,也可以是 weblate://project/component,表示与其它部件共享该仓库。更多细节请参见 Weblate 内部网址

仓库推送 URL

用于推送的仓库 URL,其行为取决于 版本控制系统。更多详细信息见 推送 Weblate 的更改

对于链接的仓库,这一点不被使用,链接部件的设置适用。

参见

关于如何指定仓库 URL 的更多细节请见 访问仓库,并且关于从 Weblate 推送更改的更多细节,请参见 推送 Weblate 的更改

仓库浏览器

用于显示源文件(所用消息的位置)的仓库浏览器的 URL。此处为空时,将不生成这样的链接。你可以使用 模板标记

例如在 GitHub 上,使用类似:https://github.com/WeblateOrg/hello/blob/{{branch}}/{{filename}}#L{{line}}

如果你的路径是相对于不同文件夹的(路径包含 ..),您可能想使用 parentdir 过滤器(见 模板标记)来剥除前导文件夹:https://github.com/WeblateOrg/hello/blob/{{branch}}/{{filename|parentdir}}#L{{line}}

已导出仓库 URL

由 Weblate 进行的更改被导出的 URL。当不使用 持续本地化 时,或者当需要手动合并更改时,这是重要的。您可以为 Git 仓库使用 Git 导出器,来将其自动化。

仓库分支

从版本控制系统核实哪个分支,以及从哪里寻找翻译。

对于链接的仓库,这一点不被使用,链接部件的设置适用。

推送分支

用于推送更改的分支,留空则使用 仓库分支

对于链接的仓库,这一点不被使用,链接部件的设置适用。

备注

此功能目前只支持 Git、GitLab 和 GitHub,不支持其他版本控制系统集成。

文件掩码

要翻译的文件的掩码,包括路径。它应包含一个“*”替换语言代码(有关处理方式的信息,请参阅 语言定义)。如果您的仓库包含多个翻译文件(例如,多个 gettext 域),则您需要为每个文件创建一个部件。

例如 po/*.polocale/*/LC_MESSAGES/django.po

如果文件名包含特殊字符(例如 []),则需要将这些特殊字符转义为 [[][]]

截屏文件掩码

此功能使用 VCS 仓库路径通过截屏文件掩码来发现和更新截屏。此功能运行在组件级别且必须使用星号“*”来替换截屏文件名。

允许的格式是 WebP、JPEG、PNG、APNG 和 GIF。

备注:

  1. 文件掩码和截屏文件掩码并不相关,请分别配置它们。

  2. 需要手动将部件中发现的截屏链接到特定的翻译密钥。

例如:

让我们假定你的 VCS 仓库有一个类似这样的结构:

component_A
└── docs
    ├── image1.png
    └── image2.jpg

对于 A 部件,你想允许 PNG 截屏发现和更新。你会把 A 部件的截屏文件掩码设置为 component_A/docs/*.png。这表示部件 A 中 doc 目录下的任意 PNG 格式图片可被发现并更新。因此,若你想更新 image1.png,你提供的新截屏应当命名为 image1.png 来匹配现有的 filename,并保存在 component_A/docs/ 下。

单语言译文模版语言文件

包含字符串定义的译文模板文件,用于 单语言部件

编辑译文模版文件

是否允许编辑 :ref:`component-template`中的字符串。

中间语言文件

对于 单语言部件 的单一语言文件。在多数情况下,这是开发者提供的翻译文件,并且在新建真正的源字符串时使用。

设置好后,源字符串将基于此文件,但所有其他语言都基于 单语言译文模版语言文件。如果字符串没有被翻译成源语言,则禁止翻译成其他语言。这样就提供了 源字符串质量把关

新语种的翻译模版

用于生成新翻译的翻译模板文件。

  • 对于多数单语言格式,请将此字段留空。这些格式通常可以从一个空白文件开始。

  • GNU gettext PO 文件选择 .pot 文件。

  • 选择没有译文的空白文件,如果你有的话。

  • 对于需要存在完整密钥集的单语言格式,请选择 单语言译文模版语言文件

  • 文档翻译选择 单语言译文模版语言文件

  • 其他格式选择任意翻译文件。

  • 多数情况下,模板文件可以和基础文件相同。

提示

在很多单语言格式中,Weblate 默认以空文件开始。新建新的翻译时,在您想要所有的字符串都以空值出现的情况下来使用。

文件格式

翻译文件格式,还请参见 支持的文件格式

源字符串缺陷报告地址

用于报告上游缺陷的电子邮箱地址。这个地址还会收到在 Weblate 中作出的任何源字符串评论的通知。

对于 :ref:`gettext`格式,此地址同样由 Weblate 保存在该文件的 :mailheader:`Report-Msgid-Bugs-To`标头内。

允许同步翻译

您可以关闭项目内从其它部件到这个部件的翻译的传播。这实际上取决于您要翻译的内容,有时最好能多次使用同一个翻译。

对于单语言翻译,除非您跨越整个项目中使用相同的 ID,通常关闭它是个好主意。

可以通过 DEFAULT_TRANSLATION_PROPAGATION 更改默认值。

启用建议

对于这个部件,建议的翻译是否被接受。

建议投票

为建议打开投票,请参见 建议投票

自动接受建议

自动接收被投票的建议,请参见 建议投票

翻译标记

质量检查和其他 Weblate 行为的定制,请参见 使用标记定制行为

强制检查

检查哪个不能被忽视的列表,请参见 强制检查

备注

强制执行检查并不能自动启用它,你仍然应该使用 使用标记定制行为翻译标记源字符串另外的信息 中启用它。

翻译许可证

翻译的许可(不需要与源代码的许可证相同)。

贡献者协议

翻译此部件前需先同意的用户协议。

添加新语种

如何处理创建新语言的请求。可用选项:

联系维护者

用户可以选择所需的语言,项目维护者将收到相关通知。由项目维护者来决定是否将该语言添加到仓库中。

指向翻译指引 URL

用户会看到一个链接,该链接指向的页面描述了开始新翻译的过程。如果需要更正式的过程(例如在开始实际翻译之前组建一个团队),请使用此选项。

为新语言创建翻译文档

用户可以选择语言,Weblate 会自动为其创建文件,然后就可以开始翻译了。

禁用添加新语种

用户将无法开始新的翻译。

提示

项目管理员可以添加新的翻译,即使这里是禁用的,只要有可能(要么:新语种的翻译模版,要么文件格式支持从一个空文件开始)。

管理字符串

Added in version 4.5.

配置Weblate中的用户是否被允许添加新字符串和删除现有字符串。调整这一点以配合你的本地化工作流程–新字符串应该如何被引入。

对于双语格式,字符串通常是从源代码中提取的(例如通过使用 xgettext),在Weblate中添加新的字符串应该被禁用(下次更新翻译文件时,它们会被丢弃)。在Weblate中,你可以为每个翻译管理字符串,但它并不强制要求所有翻译中的字符串都是一致的。

对于单语格式,字符串只在源语言上管理,并在翻译中自动添加或删除。一旦翻译完毕,这些字符串就会出现在翻译文件中。

提示

对于单语言格式,你可能想要同时打开 component-edit_template`和 :guilabel:`Manage strings

语言代码风格

自定义 Weblate 创建的用于生成翻译文件名的语言代码。

备注

Weblate 在解析翻译文件时能识别其中的语言代码,以下设置只影响新文件的创建方式。

基于文件格式的默认值

取决于文件格式,其中大多数文件格式用的是 POSIX 风格。

POSIX 风格,使用下划线作为分隔符

通常由 gettext 和相关工具使用,生成像 pt_BR 这样的语言代码。

POSIX style using underscore as a separator, lower cased

通常由 gettext 和相关工具使用,生成像 pt_BR 这样的语言代码。

POSIX 风格,使用下划线作为分隔符,包括国家地区代码

POSIX 风格的语言代码,包含国家地区代码,即使没有必要(例如 cs_CZ)。

POSIX style using underscore as a separator, including country code, lower cased

POSIX 风格的语言代码,包含小写的国家地区代码,即使没有必要(例如 cs_cz)。

BCP 风格,使用连字符作为分隔符

通常用于网络平台,生成像 pt-BR 这样的语言代码。

BCP 风格,使用连字符作为分隔符,包含国家地区代码

BCP 风格的语言代码,包含国家地区代码,即使没有必要(例如 cs-CZ)。

BCP 风格,使用连字符作为分隔符,旧式语言代码

对中文和 BCP 样式符号使用旧代码。

BCP 样式,使用连字符作为分隔符,小写

BCP 样式表示法,全部为小写(例如 cs-cz )。

Apple 应用商店元数据样式

适用于将元数据上传到 Apple 应用商店的样式。

Google Play 元数据样式

适用于将元数据上传到 Google Play 应用商店的样式。

Android 风格

只在 Android 应用中使用,生成 pt-rBR 这样的语言代码。

Linux 风格

Linux 使用的语言环境,使用中文和 POSIX 样式符号的遗留代码。

Linux style, lower cased

Locales as used by Linux, uses legacy codes for Chinese and POSIX style notation. Lower cased.

合并方式

你可以配置如何处理来自上游仓库的更新。实际部署取决于版本控制系统,见 版本控制集成

变基

在更新时,将Weblate的提交重新放在上游仓库之上。这提供了干净的历史,没有额外的合并提交。

在复杂融合的情况下,变基可能使你产生麻烦,因此请仔细考虑是否允许它们。

你可能需要通过选择 :ref:`vcs-git-force-push`作为 :ref:`component-vcs`来启用强制推送,特别是在推送到不同的分支时。

合并

上游仓库更改合并到 Weblate 之一。此设置尽可能使用快进。这是最安全的方式,但可能会产生大量合并提交。

不快进合并

上游仓库的修改会被合并到Weblate仓库中,每次都要做一次合并提交(即使是在可以快进的时候)。每一个Weblate的修改都会在Weblate仓库中显示为合并提交。

可以通过 DEFAULT_MERGE_STYLE 更改默认值。

提交、添加、删除、合并、附加组件及合并请求说明

在提交翻译时使用的说明,请参见 模板标记

可以通过 DEFAULT_ADD_MESSAGEDEFAULT_ADDON_MESSAGEDEFAULT_COMMIT_MESSAGEDEFAULT_DELETE_MESSAGEDEFAULT_MERGE_MESSAGEDEFAULT_PULL_MESSAGE 更改默认值。

提交时推送

是否提交更改应该被自动推送到上游仓库。当允许时,一旦 Weblate 将更改提交给基础仓库,推动就被启动(请参见 惰性提交)。为了真正允许推送,还要配置 Repository push URL

对更改进行提交的延时时间

设置在后台任务或 commit_pending 管理命令提交更改前,这些更改存在的时长(以小时为单位)。一旦存在至少一个比该时长更旧的更改,便会提交部件中的所有更改。

可以通过 COMMIT_PENDING_HOURS 更改默认值。

提示

还有一些情况下,待定的修改可能会被提交,见 惰性提交

出错时锁定

在第一次推送或合并到上游仓库失败后,锁定该部件(及其链接部件,参见 Weblate 内部网址),或从上游仓库拉出。这样可以避免增加必须手动解决的冲突。

一旦仓库没有故障留下来了,部件将会自动解锁。

源语言

用于源字符串的语言。如果您要翻译的不是英语,请更改此选项。

提示

如果你正在从英语翻译双语文件,但又希望能够在英语翻译中进行修复,选择 English (Developer) 作为一种源语言以避免源语言和现有翻译之间名称上的冲突。

对于单语言翻译,您可以使用这种情况下的中间翻译,请参见 中间语言文件

语言筛选

当扫描文件掩码时用于将翻译过滤的正则表达式。它可以用于限制 Weblate 管理的语言列表。

备注

单出现在文件名中时,您需要列出语言代码。

过滤的一些示例:

过滤器的描述

正则表达式

只有选择的语言

^(cs|de|es)$

排除语言

^(?!(it|fr)$).+$

只筛选两个字母的代码

^..$

排除非语言文件

^(?!(blank)$).+$

包括所有文件(默认)

^[^.]+$

正则表达式变体

用于确定字符串变体的正则表达式,请见 字符串变体

备注

多数字段可以由项目所有者或管理员在 Weblate 界面上编辑。

优先级

高优先级的部件将最先提供给译者。

在 4.15 版本发生变更: 这同样影响匹配的术语表术语的顺序。

受限制的访问

备注

此功能在 Hosted Weblate 上不可用。

部件默认对访问项目的任何人都可见,即使不能在部件中进行任何更改。这会容易地使翻译在项目内保持一致。

在部件或部件列表级别限制访问,会接管对部件的访问权限,而不考虑项目层面的权限。你必须明确地授予它访问权。这可以通过授予一个新的用户组并将用户放入其中,或者使用默认的 自定义私有 访问控制组来实现。

默认设置可在 DEFAULT_RESTRICTED_COMPONENT 中更改。

提示

这也应用于项目管理员—请确认切换状态后,您不会丢失对部件的访问。

在项目中分享

可以选择部件可见的其他项目。这在分享不同项目间使用的库时是有用的。

备注

分享部件不更改其访问控制。这样做只是让它在浏览其它项目时可见。用户仍然需要访问实际部件的权限来浏览或翻译它。

用作术语表

Added in version 4.5.

允许将此部件用作术语表。您可以用 术语表颜色 配置它的列出方式。

术语表将可以在所有由 :ref:`component-links`定义的项目中访问。

建议在术语表上启用 管理字符串,以允许添加新词。

参见

术语表

术语表颜色

显示术语表的颜色,在显示单词匹配时使用。

分类

分类的作用是赋予项目内部件以结构。你可以嵌套它们来实现更复杂的结构。

模板标记

Weblate 在几个需要进行文本渲染的地方使用了简单的标记语言。它基于 The Django template language,所以它可以非常强大。

当前它用在:

在部件模板中,有以下变量可用:

{{ language_code }}

语言代码

{{ language_name }}

语言名称

{{ component_name }}

部件名称

{{ component_slug }}

部件标识串

{{ project_name }}

项目名称

{{ project_slug }}

项目标识串

{{ url }}

翻译 URL

{{ filename }}

翻译文件名

{{ stats }}

翻译统计数据,这具有进一步的属性,示例如下。

{{ stats.all }}

字符串总量计数

{{ stats.fuzzy }}

需要复查的字符串计数

{{ stats.fuzzy_percent }}

需要复查的字符串百分比

{{ stats.translated }}

已翻译的字符串计数

{{ stats.translated_percent }}

已翻译的字符串百分比

{{ stats.allchecks }}

带有未通过检查的字符串数量

{{ stats.allchecks_percent }}

带有未通过检查的字符串百分比

{{ author }}

当前提交的作者,只在提交范围可用。

{{ addon_name }}

当前执行的附加组件名称,旨在附加组件提交说明中可用。

后面的变量在仓库浏览器或编辑器模板中可用:

{{branch}}

当前的分支

{{line}}

文件的行数

{{filename}}

文件名,您也可以使用 parentdir 过滤器,例如 {{filename|parentdir}},来剥除前导部分

提示

某些地方可能有额外的变量可用,见 部件发现

您可以将它们与过滤器结合:

{{ component|title }}

您可以使用条件:

{% if stats.translated_percent > 80 %}Well translated!{% endif %}

有另外的标签用于替换字符:

{% replace component "-" " " %}

您可以将它与过滤器结合:

{% replace component|capfirst "-" " " %}

还有另外的过滤器来操作文件名:

Directory of a file: {{ filename|dirname }}
File without extension: {{ filename|stripext }}
File in parent dir: {{ filename|parentdir }}
It can be used multiple times:  {{ filename|parentdir|parentdir }}

……以及其他 Django 模板特性。

导入速度

从版本控制系统仓库获取并将翻译导入 Weblate 可能会是漫长的过程,具体取决于您的翻译的大小。以下是一些提示:

优化配置

默认配置对于测试和调试 Weblate 很有用。而对于生产设置,您应该做一些调整。许多调整对性能有相当大的影响。请查阅 生产设置 了解详情,特别是:

检查资源的限制

如果导入巨大的翻译或仓库,您会遭到服务器资源限制的打击。

  • 检查空闲内存的量,通过操作系统来缓存翻译,将极大地提高性能。

  • 如果有很多字符串需要处理的话,磁盘操作会是瓶颈——磁盘被 Weblate 和数据库施加压力。

  • 另外的 CPU 核心会帮助提高后台任务的性能(请参见 使用 Celery 的后台任务)。

禁止不必要的检查

一些质量检查可能相当昂贵,如果不需要,在导入时省略可以节省一些时间。配置的信息请参见 CHECK_LIST

自动新建部件

在您的项目有十多个翻译文件的情况下(例如不同的 gettext 域,或 Android 应用的一部分),您会想要将它们自动导入。可以通过使用 import_projectimport_json,或者通过安装 部件发现 附加组件,通过命令行来实现。

要使用附加组件,首先您需要为一个翻译文件(选择未来最不可能改名或删除的那个)创建一个部件,然后在该部件上安装附加组件。

对于管理命令,您需要新建包含所有部件的项目,然后运行 import_projectimport_json