常见问题

配置

如何创建自动化工作流?

Weblate 可以为您半自动处理所有翻译工作。如果授予它对仓库的推送访问权限,则翻译可以在没有交互的情况下进行,除非发生某些合并冲突。

  1. 新建您的 Git 仓库,来告知 Weblate 何时有任何更改,请参阅 通知钩子 以获取有关如何执行此操作的信息。

  2. 在 Weblate 中的 组件配置 配置中设置推送 URL,这使 Weblate 可以将更改推送到仓库。

  3. 在 Weblate 中打开 compoent`上的 :ref:`component-push_on_commit,这将使 Weblate 在 Weblate 发生更改时将更改推送到仓库。

如何通过 SSH 访问仓库?

设置 SSH 密钥的信息请参阅 Accessing repositories

如何修复翻译中的合并冲突?

在翻译文件在 Weblate 和上游仓库同时更改时,合并冲突不时发生。通常可以通过在对翻译文件进行更改前(例如在运行 msgmerge 前)合并仓库来避免发生这个情况。只要告诉 Weblate 执行挂起所有的翻译(可以在 Manage 菜单中的 Repository maintenance 中去做),并合并仓库即可(如果自动推送没有打开的话)。

如果已经进入了合并冲突,那么最容易的方式是在您自己的工作站上本地解决所有冲突——就是简单地将 Weblate 添加为远程仓库,将它合并到上游,并修复任何冲突。一旦将更改推送回去,Weblate 就将能够使用合并的版本而无需任何其它特殊动作。

注解

取决于你的设置, 访问 Weblate 代码库可能需要身份验证。 使用 Weblate 中内建的 :ref:`git-exporter`时,你使用用户名和 API 密钥进行身份验证。

# Commit all pending changes in Weblate, you can do this in the UI as well:
wlc commit
# Lock the translation in Weblate, again this can be done in the UI as well:
wlc lock
# Add Weblate as remote:
git remote add weblate https://hosted.weblate.org/git/project/component/
# You might need to include credentials in some cases:
git remote add weblate https://username:APIKEY@hosted.weblate.org/git/project/component/

# Update weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts:
edit …
git add …
…
git commit

# Push changes to upstream repository, Weblate will fetch merge from there:
git push

# Open Weblate for translation:
wlc unlock

如果在 Weblate 中使用多个分支,那么可以对所有的分支做相同的事:

# Add and update Weblate remotes
git remote add weblate-one https://hosted.weblate.org/git/project/one/
git remote add weblate-second https://hosted.weblate.org/git/project/second/
git remote update weblate-one weblate-second

# Merge QA_4_7 branch:
git checkout QA_4_7
git merge weblate-one/QA_4_7
... # Resolve conflicts
git commit

# Merge main branch:
git checkout main
git merge weblates-second/main
... # Resolve conflicts
git commit

# Push changes to the upstream repository, Weblate will fetch the merge from there:
git push

在 gettext PO 文件的情况下,有一种方式以半自动方式来合并冲突:

取回并保存 Weblate Git 仓库的本地克隆。还要得到上游 Git 仓库的第二个新的本地克隆(也就是需要上游 Git 仓库的两份复件:完整的复件和工作复件):

# Add remote:
git remote add weblate /path/to/weblate/snapshot/

# Update Weblate remote:
git remote update weblate

# Merge Weblate changes:
git merge weblate/main

# Resolve conflicts in the PO files:
for PO in `find . -name '*.po'` ; do
    msgcat --use-first /path/to/weblate/snapshot/$PO\
               /path/to/upstream/snapshot/$PO -o $PO.merge
    msgmerge --previous --lang=${PO%.po} $PO.merge domain.pot -o $PO
    rm $PO.merge
    git add $PO
done
git commit

# Push changes to the upstream repository, Weblate will fetch merge from there:
git push

如何立刻翻译几个分支?

Weblate 支持在一个 项目配置 内推送翻译更改。对于每个将其打开的 组件配置 (默认行为),所作的更改自动传递给其它组件。即使分支本身已经非常多样化了,也能以这种方式保持同步,并且不能在他们之间简单地合并翻译更改。

一旦从 Weblate 合并了更改,就会不得不合并这些分支(依赖于您的开发工作流程),而丢弃差异:

git merge -s ours origin/maintenance

如何翻译多平台项目?

Weblate 支持大范围的文件格式(请参见 支持的文件格式),而最容易的方式时对每个平台使用本地格式。

一旦在一个项目中将所有平台的翻译文件作为组件添加(请参见 添加翻译项目和组件),就可以立刻使用翻译传播特性(默认打开,并且可以在 组件配置 中关闭),来翻译所有平台的字符串了。

如何导出 Weblate 使用的 Git 仓库?

仓库没有什么特殊的,它存在于 DATA_DIR 目录下面,并被命名为 vcs/<project>/<component>/。如果有 SSH 范文这台机器,那么可以直接使用仓库。

对于匿名访问,您会想要运行 Git 服务器,并让它为外部世界提供仓库服务。

此外,可以在 Weblate 内替代使用 Git 导出器 而使其自动化。

将更改推送回上游的选项是什么?

这严重依赖于您的设置,Weblate 在这个领域是非常灵活的。这里是使用 Weblate 的一些工作流程的例子:

  • Weblate 自动推送并合并更改(请参见 如何创建自动化工作流?)。

  • 您需要手动告诉 Weblate 去推送(推送需要访问上游仓库)。

  • 一些人将 Weblate git 仓库的更改手动合并到上游仓库中。

  • 一些人重写由 Weblate 生成的历史(例如通过删除合并提交),合并更改,并告诉 Weblate 重置上游仓库中的内容。

当然您可以按您的意愿自由混用所有这些方法。

如何限制 Weblate 只访问翻译,而不向它暴露源代码?

可以使用 git submodule 将翻译从源代码中分离出来,而仍将它们至于版本控制之下。

  1. 以您的文艺文件创建仓库。

  2. 将其作为子模块添加到您的代码中:

    git submodule add git@example.com:project-translations.git path/to/translations
    
  3. 将 Weblate 连接到这个仓库上,它不再需要访问包含您源代码的仓库。

  4. 可以从 Weblate 更新带有翻译的主仓库,通过:

    git submodule update --remote path/to/translations
    

更多细节请咨询 git submodule 文档。

如何检查 Weblate 是否被正确地设置?

Weblate 包括一组配置检查,可以在管理面板中看到,只需按照管理面板中的 Performance report 连接,或直接打开 /manage/performance/ URL 即可。

为什么所有提价由 Weblate <noreply@weblate.org> 执行?

这是默认的提交者的名称,当创建翻译组件时配置。可以在任何时间在管理时将其更改。

(如果下层的版本管理系统 VCS 支持它的话),每个提交的作者仍会被正确地记录为进行翻译的用户。

参见

组件配置

用法

如何复查其他人的翻译?

  • 在 Weblate 中,基于工作流程有几种复查方式,请参见 翻译工作流

  • 可以订阅 通知 中做出的任何更改,然后检查当它们通过电子邮件进入时检查其他人的贡献。

  • 在翻译视图底部有个复查工具,可以在那里选择浏览给定时间以来其他人进行的翻译。

如何提供源字符串的反馈?

在翻译下面的文本标签上,可以使用 Comments 标签来提供源字符串的反馈,或者与其他翻译者讨论。

翻译时如何使用现有的翻译?

  • 得益于共享的翻译记忆库,Webate 中的所有翻译都可以使用。

  • 你可以将现有翻译记忆库导入 Weblate。

  • 使用导入功能将概要导入作为翻译、建议或需要复查的翻译。这是使用概要或相似的翻译数据库一次性翻译的最好方法。

  • 可以使用您所具有的所有数据库来设置 tmserver。在翻译时多次使用的时候这种方法很好。

  • 另一个选项是在单一 Weblate 事件中翻译所有相关项目,这样同样可以从其它项目中自动地拾取翻译。

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

Weblate 尝试将翻译文件中的更改限制为最小。对于有些文件格式,很不幸会导致将文件重新格式化。如果想要将文件保持为自己的格式化方式,请为其使用预提交钩子。

语言定义来自何处以及如何添加自己的语言定义?

语言定义的基本组包括在 Weblate 和 Translate-toolkit 中。这覆盖了超过 150 种语言,并且包括了复数形式和文本方向的信息。

您可以在管理界面自由定义自己的语言,只需要提供与之相关的信息。

参见

语言定义

Weblate 能将模糊字符串中的更改高亮吗?

Weblate 支持这个功能,然而它需要数据来显示差异。

对于 Gettext PO 文件,更新 PO 文件时,必须将参数 --previous 传递给 msgmerge,例如:

msgmerge --previous -U po/cs.po po/phpmyadmin.pot

对于单语言翻译,Weblate 可以通过 ID 找到之前的字符串,因此可以自动显示差异。

当已经更新了模板时,为什么 Weblate 仍然显示旧的字符串?

Weblate 除了允许翻译者翻译之外,不会尝试以任何方式操作翻译文件。因此当模板或源代码更改时,它也同样不会更新翻译文件。您必须简单地手动去做,并将更改推送到仓库,然后 Weblate 会自动拾取更改。

注解

在更新翻译文件之前在 Weblate 中完成更改合并,这通常是个好主意,因为否则的话通常会以一些合并冲突来结束。

例如对于 gettext PO 文件,可以使用 msgmerge 工具来更新翻译文件:

msgmerge -U locale/cs/LC_MESSAGES/django.mo locale/django.pot

在想要进行自动更新的情况下,可以安装插件 更新 PO 文件以匹配 POT 文件 (msgmerge)

故障排除

请求有时失败,错误信息为“too many open files”(打开文件过多)

有时当您的 Git 仓库增长太多并您有太多仓库时会发生。压缩 Git 仓库会改善这种情况。

这样做的最容易方式是运行:

# Go to DATA_DIR directory
cd data/vcs
# Compress all Git repositories
for d in */* ; do
    pushd $d
    git gc
    popd
done

参见

DATA_DIR

当访问网站时,“Bad Request (400)”(错误的请求)错误信息

这很可能因为 ALLOWED_HOSTS 配置不当而产生。需要包含在 Weblate 上访问的所有主机名。例如:

ALLOWED_HOSTS = ["weblate.example.com", "weblate", "localhost"]

“There are more files for the single language (en)”(单一语言‘英语’有多个文件)是什么意思?

当源语言有翻译时这会典型发生。Weblate 跟踪源字符串,并为此保留源字符串。相同语言的附加字符串不会被处理。

  • 如果需要对源语言进行翻译,请更改组件设置中的:ref:component-source_language

  • 如果不需要源语言的翻译文件,请从存储库中将其删除。

  • 如果需要源语言的翻译文件,但 Weblate 应该忽略它,请调整 :ref: component-language_regex 来排除它。

提示

对于其它语言可能也会得到相似的错误信息。在这种情况下最可能的原因是在 Weblate 中几个文件映射到单语言上。

这可能是由于将过时的语言编码与新的一起使用(对于日语是``ja``和``jp``),或者包括了特定国家的和通用的语言编码(fr``和``fr_FR)。更多细节请参见 分析语言代码

功能

Weblate 支持 Git 和 Mercurial 意外的 VCS 吗?

Weblate 当前不支持 Git (扩展支持 GitHubGerritSubversion)和 Mercurial 以外的任何 VCSes,但能够对其它 VCSes 写后端。

还可以在 Git 中使用 Git remote helpers 来访问其它 VCSes。

Weblate 还支持无 VCS 的操作,请参见 Local files

注解

为了本地支持其它 VCSes,Weblate 需要使用分布式 VCS,并可能能够调整来与 Git 和 Mercurial 以外的其它任何 VCSes 工作,但必须有人应用这项支持。

Weblate 如何记录翻译者?

Weblate 中所做的每个更改都将以翻译者的名称提交到版本控制系统(VCS )中。这样,每个更改都具有适当的作者身份,您可以使用用于代码的标准版本控制系统(VCS )工具来进行跟踪。

此外,如果翻译文件格式支持,则文件头会更新为包含翻译者的名称。

为什么 Weblate 强制在单一树中显示所有 PO 文件?

Weblate 的设计方式是将每个 PO 文件表示为单个组件。这对翻译人员来说是有好处的,这样他们就知道他们实际上在翻译什么。

在 4.2 版更改: 翻译人员可以将项目的所有组件作为一个整体翻译成一种特定的语言。

Weblate 为什么使用 sr_Latn 或 zh_Hant 这样的语言编码?

这些语言编码由 RFC 4646 定义,来更好地指示它们是真正不同的语言而不是之前错误使用修饰符( @latin 变体)或国家代码(对于中文)。

Weblate 仍然理解传统的语言编码并将它们映射到当前的便马上——例如 sr@latin 将被处理为 sr_Latn 或者 zh@CN 处理为 zh_Hans

参见

语言定义