# 常见问题

## 配置

### 如何限制哪些语言可被翻译？

To prevent users from starting new translations across a project, open the
project settings, select Workflow, and set
Adding new translation to Disable adding new translations.
Ensure that the project's categories and components inherit this setting; see
[设置继承](https://docs.weblate.org/zh-cn/latest/admin/workspaces.md#workspace-inherited-settings). Project admins can still add translations
when Weblate can create the files.

To allow only selected language codes, configure
[语言筛选](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component-language-regex) on each component. This filters translation
files rather than controlling who can edit existing translations. See
[限制翻译语言](https://docs.weblate.org/zh-cn/latest/workflows.md#workflow-language-restrictions) for the available controls.

If unexpected languages appear in a glossary, check
[语言文件和同步](https://docs.weblate.org/zh-cn/latest/user/glossary.md#glossary-language-sync): Weblate automatically adds glossary languages
for languages used in the project.

<a id="auto-workflow"></a>

### 如何创建自动化工作流？

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

1. 设置好 Git 仓库，以便在发生更改时通知 Weblate，请参阅 [通知钩子](https://docs.weblate.org/zh-cn/latest/api.md#hooks) 获取有关如何操作的信息。
2. 在 Weblate 的 [部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component) 中设置推送 URL，这会允许 Weblate 将更改推送到仓库。
3. 在 Weblate 的 [部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component) 中开启 [提交时推送](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component-push-on-commit)，这将使 Weblate 在 Weblate 发生更改时将更改推送到仓库。

#### SEE ALSO
* [持续本地化](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#continuous-translation)
* [避免合并冲突](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#avoid-merge-conflicts)

### 如何通过 SSH 访问仓库？

设置 SSH 密钥的信息请参阅 [访问仓库](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs-repos)。

<a id="merge"></a>

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

当 Weblate 和上游仓库的翻译文件同时被更改时，合并冲突时有发生。通常可以通过在对翻译文件进行更改前（例如在运行 msgmerge 前）先合并 Weblate 的翻译来避免这种情况。只需告诉 Weblate 提交所有待处理的翻译（可以在 操作 菜单中的 仓库维护 中执行此操作），并合并仓库（如果没有开启自动推送）。

如果你已经遇到了合并冲突，那么在您的机器上本地解决所有冲突的最简单方法是将 Weblate 添加为远程仓库，将它合并到上游，并修复任何冲突。一旦将更改推送回去，Weblate 就将能够使用合并的版本而无需任何其他特殊操作。

#### NOTE
If you resolve the conflict in a pull request, merge it with a regular merge
commit. Do not squash merge it. Squash merging creates a new commit instead
of preserving the Weblate commits, so Weblate might not recognize that its
local commits are already included upstream and might need a repository
reset to recover.

#### NOTE
Weblate 默认使用浅克隆降低克隆时间和磁盘使用。因此下方的工作流在你从上游仓库的最新 checkout 开始时效果最好。如果你直接从导出的 Weblate 仓库克隆，或者如果你的上游 checkout 缺少近期的提交， `git remote update weblate` 可能因 `warning: no common commits`、`bad revision` 等错误或缺失对象而出故障。这未必表示 Weblate 和上游仓库有相冲突的更改。想让这个工作流更可靠的管理员可以调整 [`VCS_CLONE_DEPTH`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-VCS_CLONE_DEPTH)。

#### NOTE
取决于你的设置，访问 Weblate 仓库可能需要身份认证。使用 Weblate 中内建的 [Git 导出器](https://docs.weblate.org/zh-cn/latest/admin/optionals.md#git-exporter) 时，你需使用用户名和 API 密钥进行身份认证。

#### NOTE
Weblate 自行提供 Git 仓库，但它不提供 Git LFS 对象。支持的行为见 [Git LFS](https://docs.weblate.org/zh-cn/latest/vcs.md#git-lfs)。用 Git LFS 从上游仓库克隆仓库并将 Weblate 添加为另一个远端。如果只需要 Git-tracked 文件，可以使用 `GIT_LFS_SKIP_SMUDGE=1` 参数从 Weblate 克隆跳过下载 Git LFS 对象。

该工作流在你从上游仓库的最新 checkout 开始时通常看起来像这样：

```sh
# Open an existing up-to-date checkout of the upstream repository or perform
# a fresh one:
git clone UPSTREAM_REPOSITORY_URL
cd REPO
# 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

# Rebase changes (if Weblate is configured to do rebases)
git rebase origin/main

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

# Open Weblate for translation:
wlc unlock
```

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

```sh
# 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 仓库的两份复件：完整的复件和工作复件）：

```sh
# 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
```

#### SEE ALSO
* [如何导出 Weblate 使用的 Git 仓库？](#git-export)
* [持续本地化](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#continuous-translation)
* [避免合并冲突](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#avoid-merge-conflicts)
* [Weblate 客户端](https://docs.weblate.org/zh-cn/latest/wlc.md#wlc)

### 如何同时翻译几个分支？

Weblate 支持在一个 [项目配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#project) 内推送翻译更改。对于每个将其打开的 [部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component)（默认行为），所作的更改自动传递给其他部件。即使分支本身已经非常多样化了，也能以这种方式保持同步，并且不能在他们之间简单地合并翻译更改。

一旦从 Weblate 合并了更改，你可能不得不合并这些分支（取决于于您的开发工作流程），并丢弃差异：

```sh
git merge -s ours origin/maintenance
```

#### SEE ALSO
[跨部件保持翻译一致](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#translation-consistency)

### 如何翻译多平台项目？

Weblate 支持多种文件格式（请参见 [本地化文件格式](https://docs.weblate.org/zh-cn/latest/formats.md)），最简单的方法就是使用每个平台的原生格式。

一旦在一个项目中将所有平台的翻译文件作为部件添加（请参见 [添加翻译项目和部件](https://docs.weblate.org/zh-cn/latest/admin/projects.md#adding-projects)），就可以立刻使用翻译传播特性（默认打开，并且可以在 [部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component) 中关闭），来翻译所有平台的字符串了。

#### SEE ALSO
[跨部件保持翻译一致](https://docs.weblate.org/zh-cn/latest/admin/continuous.md#translation-consistency)

<a id="git-export"></a>

### 如何导出 Weblate 使用的 Git 仓库？

仓库没有什么特殊的，它存在于 [`DATA_DIR`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-DATA_DIR) 目录下面，并被命名为 `vcs/<project>/<component>/`。如果有 SSH 访问这台机器，那么可以直接使用仓库。

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

此外，可以在 Weblate 内替代使用 [Git 导出器](https://docs.weblate.org/zh-cn/latest/admin/optionals.md#git-exporter) 而使其自动化。

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

这在很大程度上取决于您的设置，Weblate 在这方面非常灵活。这里是一些使用 Weblate 的工作流程的示例：

- Weblate 自动推送并合并更改（请参见 [如何创建自动化工作流？](#auto-workflow)）。
- 您需要手动告诉 Weblate 去推送（推送需要访问上游仓库）。
- 一些人将 Weblate git 仓库的更改手动合并到上游仓库中。
- 一些人重写由 Weblate 生成的历史（例如通过删除合并提交），合并更改，并告诉 Weblate 重置上游仓库中的内容。

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

<a id="faq-submodule"></a>

### 如何限制 Weblate 仅访问翻译，而不向其暴露源代码？

可以使用 [git submodule](https://git-scm.com/docs/git-submodule) 将翻译从源代码中分离出来，而仍将它们至于版本控制之下。

1. 用翻译文件创建一个仓库。
2. 将其作为子模块添加到您的代码中：
   ```sh
   git submodule add git@example.com:project-translations.git path/to/translations
   ```
3. 将 Weblate 连接到这个仓库上，它不再需要访问包含您源代码的仓库。
4. 可以从 Weblate 更新带有翻译的主仓库，通过：
   ```sh
   git submodule update --remote path/to/translations
   ```

Weblate should be linked to the translation repository directly. It does not
populate submodules when cloning a parent repository, so translation files
inside a submodule are not available through the parent repository. See
[Git 子模块](https://docs.weblate.org/zh-cn/latest/vcs.md#git-submodules).

更多细节请咨询 [git submodule](https://git-scm.com/docs/git-submodule) 文档。

<a id="faq-monitoring"></a>

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

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

#### SEE ALSO
* [监测 Weblate](https://docs.weblate.org/zh-cn/latest/admin/install.md#monitoring)
* [监测 Celery 状态](https://docs.weblate.org/zh-cn/latest/admin/install.md#monitoring-celery)

### 为什么所有提交都是由 Weblate <[noreply@weblate.org](mailto:noreply@weblate.org)> 提交的？

Weblate 使用 `Weblate <noreply@weblate.org>` 作为所有提交的默认 **committer**，此项由 [`DEFAULT_COMMITER_EMAIL`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-DEFAULT_COMMITER_EMAIL) 和 [`DEFAULT_COMMITER_NAME`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-DEFAULT_COMMITER_NAME) 配置。这是显示提交是通过 Webalte 进行处理的技术标识符。

不过，每个提交的 **author** 会被正确记录为进行翻译的单个用户（使用 Git 时）。这表示可以查看 commit author 字段看到是谁实际翻译了每条字符串。这同样应用于 Mecurial；仅 Subversion 没有这个能力。

#### NOTE
在 Git 中，提交人（创建提交对象的人）和作者（进行更改）的人有区别。Weblate 以提交人身份行事，同时保留个体译者归因作为作者。

无法确定身份的代码提交（例如来自匿名建议或机器翻译结果的自动更改），作者被设置为匿名用户。可以在 [`ANONYMOUS_USER_NAME`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-ANONYMOUS_USER_NAME) 中配置匿名用户的名称和电子邮箱。

#### SEE ALSO
[部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component)

### 如何移动仓库中的文件而不丢失 Weblate 中的历史记录？

要在更改文件位置后保留链接到字符串的历史记录，注释或屏幕截图，您需要确保这些字符串永远不会在Weblate中删除。如果 Weblate 仓库已更新，但组件配置仍指向旧文件，则可能会发生这些删除操作。这使得Weblate认为它应该删除所有翻译。

解决此问题的方法是与 Weblate 同步执行操作：

1. 在 Weblate 锁定受影响的部件。
2. 提交任何待处理的更改，并将它们合并到上游仓库中。
3. 禁用接收 webhook [项目配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#project)；这可以防止 Weblate 立即看到仓库中的更改。
4. 在仓库中进行任何需要的更改（例如使用 **git mv**），将它们推送到上游仓库。
5. 更改 [部件配置](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component) 以匹配新设置；在更改配置时，Weblate 将获取更新的仓库并注意更改的位置，同时保留现有的字符串。
6. 解锁部件并重新启用项目配置中的挂钩。

#### HINT
在这种破坏性更改前执行 [项目级别备份](https://docs.weblate.org/zh-cn/latest/admin/backup.md#projectbackup) 也许会有用。

## 用法

### 如何复查其他人的翻译？

- 在 Weblate 中，基于工作流程有几种复查方式，请参见 [翻译工作流](https://docs.weblate.org/zh-cn/latest/workflows.md#workflows)。
- 你可以在 [通知](https://docs.weblate.org/zh-cn/latest/user/profile.md#notifications) 中订阅做出的任何更改，然后通过电子邮件查看其他人的贡献。
- 在翻译视图底部有个复查工具，可以在那里选择浏览给定时间以来其他人进行的翻译。

#### SEE ALSO
[翻译工作流](https://docs.weblate.org/zh-cn/latest/workflows.md#workflows)

### 如何提供源字符串的反馈？

在翻译下方的上下文选项卡中，可以通过 评论 选项卡提供源字符串的反馈，或者与其他译者讨论。

#### SEE ALSO
* [接收源字符串反馈](https://docs.weblate.org/zh-cn/latest/devel/review.md#report-source)
* [评论](https://docs.weblate.org/zh-cn/latest/user/translating.md#user-comments)

### 翻译时如何使用现有的翻译？

- 得益于共享的翻译记忆库，Weblate 中的所有翻译都可以使用。
- 你可以将现有翻译记忆库导入 Weblate。
- 使用导入功能将概要导入作为翻译、建议或需要复查的翻译。这是使用概要或相似的翻译数据库一次性翻译的最好方法。
- 可以使用您所具有的所有数据库来设置 [tmserver](https://docs.weblate.org/zh-cn/latest/admin/machine.md#mt-tmserver)。在翻译时多次使用的时候这种方法很好。
- 另一个选项是在单一 Weblate 实例中翻译所有相关项目，这样同样可以从其他项目中自动地获取翻译。

#### SEE ALSO
* [自动建议](https://docs.weblate.org/zh-cn/latest/admin/machine.md#machine-translation-setup)
* [自动建议](https://docs.weblate.org/zh-cn/latest/user/translating.md#machine-translation)
* [翻译记忆库](https://docs.weblate.org/zh-cn/latest/admin/memory.md#memory)

<a id="faq-cleanup"></a>

### Weblate 除了更新翻译，还更新翻译文件吗？

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

#### SEE ALSO
[更新目标语言文件](https://docs.weblate.org/zh-cn/latest/devel/integration.md#updating-target-files)

### 如何合并更新的 POT 文件和 PO 译文？

POT 模板文件更改时更新 PO 文件的信息，见 [更新目标语言文件](https://docs.weblate.org/zh-cn/latest/devel/integration.md#updating-target-files)。

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

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

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

#### SEE ALSO
[语言定义](https://docs.weblate.org/zh-cn/latest/admin/languages.md#languages)

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

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

对于 Gettext PO 文件，更新 PO 文件时，必须将参数 `--previous` 传递给 **msgmerge**，例如：

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

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

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

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

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

#### SEE ALSO
* [引入新字符串](https://docs.weblate.org/zh-cn/latest/devel/integration.md#translations-update)
* [更新目标语言文件](https://docs.weblate.org/zh-cn/latest/devel/integration.md#updating-target-files)
* [使用 GNU gettext 来翻译软件](https://docs.weblate.org/zh-cn/latest/devel/gettext.md)
* [使用 Sphinx 翻译文档](https://docs.weblate.org/zh-cn/latest/devel/sphinx.md)

### 如何处理重命名翻译文件？

重命名仓库中的文件时，Weblate 可能会将重命名操作视为删除和添加文件操作。这可能会导致字符串历史、评论和建议丢失。

要避免这一情况，请按下列步骤进行重命名：

1. 锁定 [管理本地 VCS 仓库](https://docs.weblate.org/zh-cn/latest/devel/integration.md#manage-vcs) 中的翻译部件。
2. 在 [管理本地 VCS 仓库](https://docs.weblate.org/zh-cn/latest/devel/integration.md#manage-vcs) 中提交待处理更改。
3. 将 Weblate 更改合并到远程仓库。
4. 使用 [启用钩子](https://docs.weblate.org/zh-cn/latest/admin/projects.md#project-enable-hooks) 禁止通过钩子接收更新。
5. 重命名仓库中的文件。
6. 更新组件配置来匹配新文件名。
7. 启用更新钩子并解锁部件。

#### HINT
在这种破坏性更改前执行 [项目级别备份](https://docs.weblate.org/zh-cn/latest/admin/backup.md#projectbackup) 也许会有用。

## 故障排除

### 请求有时失败，错误信息为“too many open files”（打开文件过多）

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

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

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

#### SEE ALSO
[`DATA_DIR`](https://docs.weblate.org/zh-cn/latest/admin/config.md#std-setting-DATA_DIR)

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

这很可能因为 [`ALLOWED_HOSTS`](https://docs.weblate.org/zh-cn/latest/admin/install.md#std-setting-ALLOWED_HOSTS) 配置不当而产生。需要包含在 Weblate 上访问的所有主机名。例如：

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

#### SEE ALSO
[允许主机设置](https://docs.weblate.org/zh-cn/latest/admin/install.md#production-hosts)

<a id="faq-duplicate-files"></a>

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

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

* 如果需要对源语言进行翻译，请更改部件设置中的 [源语言](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component-source-language)。你也许想把 英语（开发者） 用作源语言，或使用 [源字符串质量把关](https://docs.weblate.org/zh-cn/latest/workflows.md#source-quality-gateway)。
* 如果不需要源语言的翻译文件，请从仓库中将其删除。
* 如果需要源语言的翻译文件，但 Weblate 应该忽略它，请通过调整 [语言筛选](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component-language-regex) 来排除它。

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

这可能是由于同时使用了过时的语言代码和新的语言代码（对于日语是 `ja` 和 `jp`），或者包含了特定国家地区的和通用的语言代码（`fr` 和 `fr_FR`）。更多细节请参见 [解析语言代码](https://docs.weblate.org/zh-cn/latest/admin/languages.md#language-parsing-codes)。

## 功能

<a id="faq-vcs"></a>

### Weblate 支持 Git 和 Mercurial 以外的其他版本控制系统吗？

Weblate 当前不原生支持非 [Git](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs-git) （扩展支持 [GitHub 拉取请求](https://docs.weblate.org/zh-cn/latest/admin/code-hosting.md#code-hosting-github-pull-requests)、[Gerrit 审核请求](https://docs.weblate.org/zh-cn/latest/admin/code-hosting.md#code-hosting-gerrit) 和 [Subversion](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs-git-svn)）和 [Mercurial](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs-mercurial) 的版本控制系统，但可以为其他版本控制系统编写后端。

Weblate 还支持无版本控制系统的操作，请参见 [本地文件](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs-local)。

#### NOTE
对于其他版本控制系统的原生支持，Weblate 需要使用分布式版本控制系统，并可能会调整为能与除 Git 和 Mercurial 以外的任何东西一起使用，必须有人来实现这项支持。

#### SEE ALSO
[版本控制集成](https://docs.weblate.org/zh-cn/latest/vcs.md#vcs)

### Weblate 如何记录译者？

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

此外，如果翻译文件格式支持，将更新文件标头以包含译者的名字。

#### SEE ALSO
* [`list_translators`](https://docs.weblate.org/zh-cn/latest/admin/management.md#weblate-admin-list_translators)
* [翻译进度报告](https://docs.weblate.org/zh-cn/latest/devel/reporting.md)

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

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

#### Versionchanged
在 4.2 版本发生变更: 翻译人员可以将项目的所有部件作为一个整体翻译成一种特定的语言。

<a id="faq-codes"></a>

### Weblate 为什么使用 sr_Latn 或 zh_Hant 这样的语言代码？

这些是由 [**RFC 5646**](https://datatracker.ietf.org/doc/html/rfc5646.html) 定义的语言代码，而不是以前错误使用的修饰符（对于 `@latin` 变体）或国家地区代码（对于中文），可以更好地表明它们确实是不同的语言。

Weblate 仍然理解遗留的语言代码，并会将它们映射到当前对应的代码上——例如 `sr@latin` 将被处理为 `sr_Latn` 或者 `zh@CN` 处理为 `zh_Hans`。

#### NOTE
Weblate 默认为带有下划线的 POSIX 风格的语言代码，有关更多详细信息，请参阅 [语言定义](https://docs.weblate.org/zh-cn/latest/admin/languages.md#languages)。

#### SEE ALSO
* [语言定义](https://docs.weblate.org/zh-cn/latest/admin/languages.md#languages)
* [语言代码风格](https://docs.weblate.org/zh-cn/latest/admin/projects.md#component-language-code-style)
* [添加新的翻译](https://docs.weblate.org/zh-cn/latest/devel/translations.md#adding-translation)
