翻译管理

使用本地化文件(Strings)

文本由 Phrase Language AI 从英语机器翻译而得。

上传本地化文件

将文件上传到项目时,所有新资源都从该文件中提取并存储在项目中。上传文件格式不必是项目设置的初始格式。如果为分组资源提供了标记 ⁇ ,新字符串将应用这些标记。

某些格式(例如 ⁇ Gettext)提供了额外的有价值的元信息,例如备注、描述或有关复数形式的信息。这些信息会随时随地被提取出来,并和分配的资源一起保存,这样本地化文件提供的所有有价值的信息都可以保存起来供进一步使用。

上传文件有几种方法:

  • 应用程序上传文件时、创建新项目或通过在项目页面选择上传文件

  • 通过 API

  • 通过 CLI

上传选项

  • 更新译文

    默认情况下,只提取新内容,不删除或更新本地化项目中的任何现有字符串;上传文件不会丢失任何数据。如果需要覆盖现有数据,请选择更新翻译 ⁇ 选项,用本地化文件中的内容替换项目资源。现有翻译将被上传的本地化文件的内容覆盖。

    此选项在 ⁇ API 中可用。

    注释

    为防止数据丢失,请确保从 Phrase 下载对本地化文件的最新更改,然后再进行更改,并用更新翻译选项再次上传。

  • 更新说明

    如果需要更新上传文件中的所有字符串说明,请选择此选项。空明将覆盖现有说明。说明可以包含译员的任何其他信息,并帮助在编辑器中识别各个字符串。

  • 跳过上传标记

    要保持翻译井井有条,请为带有有意义标签的字符串添加多个标记。选择此选项以防止新字符串被自动标记为上传标签。

  • 标记新增和更新的翻译键

    选择此选项以在上传时自动标签新字符串和更新的翻译字符串。这将有帮助于区分新的、更新的和旧的翻译字Strings,确保只进一步处理相关的字符串。

    此选项在 ⁇ API 中可用。

  • 编码

    指定文件的编码(例如 UTF-8)或自动选择它(自动选择的编码可能会导致不正确的编码,可以通过撤消上传来回滚)。

  • 校对

    跳过未验证可以避免在更新翻译时再次验证非主要语言翻译的需要。

    将翻译标记为已审校将所有上传的翻译视为已审校。激活高级审校工作流后此选项可用。它允许将字符串标记为已经准备好,可以推送到生产环境。

通过用户界面上传文件

要在 Strings 中上传件,请执行以下步骤:

  1. 上传前,根据类型确保文件格式正确。

  2. 从项目中,从更多菜单中选择上传文件

    将打开上传文件页面。

  3. 单击 选择文件,从目录中选择一个文件。

    所选文件将添加到 文件 字段。

  4. 为文件选择格式

    首先根据文件类型提供建议的格式。

  5. 从下拉列表中为文件内容选择语言。

    如果该文件本身中没有此信息,请为内容创建新语言或使用现有语言。

  6. 可选地提供要分配给新字符串的标记和任何其他选项。

  7. 单击保存

    内容被导入并转换为密钥。

上传摘要

  • 上传失败

    如果文件不能被正确处理,则会提供错误详细信息以帮助减轻错误。

  • 成功上传

    成功处理翻译文件后,将显示一个摘要页面,其中显示了上传的概览信息,并带有链接到下一个步骤的按钮。

  • 删除字符串

    为了防止从本地化文件中删除字符串并再次上传时意外删除字符串,这些字符串不会自动删除。

    移除这些字符串,请按照以下步骤操作:

    1. 上传文件。

    2. 单击删除并选择删除未提及的字符串

    3. 确认选择。

    上传文件中未包含的所有字符串和相关翻译将从项目中删除。

  • 撤消上传

    每次上传都会触发多个操作,可以修改项目中的大量数据,并且无法撤消上传。

    要移除上传文件(错误地)引入的字符串 ⁇ ,请执行以下步骤:

    1. 从受影响上传的上传摘要中,单击删除并选择删除创建的字符串

    2. 确认选择。

    上传创建的所有字符串和相关翻译都会被清除。上传前已存在的字符串的翻译不会被删除。移除单个翻译,为每个翻译使用版本历史记录。

上传档案

从任何项目页面,从更多菜单中选择上传以访问上传存档。

上传存档列出所有历史上传。单击列出的上传访问受影响的资源的详细上传摘要。所有成功的上传都会在项目目活动流中显示。

下载本地化文件

语言文件可以在任何时间从项目下载为任何支持的文件格式

可以从该应用程序通过 ⁇ API、 ⁇ 或CLI下载文件。

可通过单击导出(多个文件)或一种语言的更多/下载按钮从任何项目的语言选项卡下载文件。

下载选项

下载窗口中下载文件时,会出现下载选项,其中有常规高级编码选项卡。

选择不同的文件格式会出现不同的选项。

用例

维护文件结构

默认情况下,可译的资源以字符串和值的形式存储,而不是保持原始的文件结构。这就允许在尚未锁定一种格式的情况下交换文件格式以及使用标记进行灵活的分组。

某些框架或设置需要多个原文/源语文件,也需要额外的配置。

保持单独的文件

一般来说,每种语言的所有翻译都保存在一个文件中。这使资源下载变得更快、更强大。翻译是按照项目进行组织的,因此不需要单独的小文件。

如果需要将本地化文件维护为单独的文件,则可以使用基于文件的工作流,在上传时标记字符串,并在将翻译后的字符串下载回原始文件时将标记作为参考。字符串可以携带多个标记并包含在多个文件中,确保重复使用和一致性。基于标签的工作流是灵活的,无需上传项目即可重组公司翻译资源。

为所有密钥命名,确保工作流顺畅。在基于键值的方法中,键在任何情况下都必须具有相同的值。某些框架允许对多个文件使用非唯一密钥。Symfony 等格式支持消息域。文件名检测到这些域。字符串不会自动由基于文件名的领域限定范围,但可以通过为文件中的字符串使用唯一的领域前缀来解决。

CLI 配置示例

如果使用 CLI 或将项目与存储库(例如 ⁇ GitHub、 ⁇ GitLab 或 ⁇ Bitbucket)连接,设置一个配置文件 ⁇ 以管理上传和下载。

例如,一个项目为原文/源语区域有几个语义命名的翻译文件。例如:accounts.en.ymlemail.en.yml 等这些语义名称是通过标记管理的。

配置 ⁇ .phrase.yml ⁇ 以反映本地化项目中文件的公司情况,并通过在文件路径中包含标签占位符将其与 Strings 项目中的标签相关联:

短Phrase:
  access_token:"3d7e6598d955bfcab104c45c40af1b9459df5692ac4c28a17793"
  project_id:"23485c9c5dfb15d85b32d9c5f3d2hl54"
  file_format: yml
  推送:
    源语言:
      — 文件:./path/to/locales/<标签>.en.yml
        参数:
          locale_id: "abcd1234cdef1234abcd1234cdef1234"
  拉取:
    译文:
      # 个账户
      — 文件:./path/to/locales/accounts.<区域_名称>.yml
        参数:
          Tags: 账户
      # 封邮件
      — 文件:./path/to/locales/email.<区域_名称>.yml
        参数:
          tags: 邮件

参数 ⁇ 标签 ⁇ 也可用于推送部分,而不是使用 ⁇ <标签> ⁇ 占位符。

该配置在运行 ⁇ a 推送或从存储库库触发同步时,根据标记来自的文件创建带有标记的字符串。当运行 ⁇ 拉取 ⁇ 或触发向存储库的导出时,它会根据字符串的标记将字符串分组为文件。

为不同地区、客户或受众本地化项目

产品、网站或 app 被翻译成多种语言,但在某些情况下,本地化不仅仅是所选语言,而是一种语言的不同版本。

如果:

  • 一种产品在使用相同语言的地区有不同的品牌。

  • 一个产品适用于需要使用白色标签解决方案的不同客户。

  • 需要语言变体,例如简单、正式或非正式。

本地化静态产品

如果产品完全开发而很少更新,项目中可以有该产品的独立版本。

  • 如果单个输出或短期术语项目:

    创建分支,在项目期间专门在该分支工作,并在完成后删除该分支。

  • 如果长期术语项目:

    保持现有项目的复制。这允许邀请同一公司中的客户并与其合作,只提供对其项目的访问,其他项目则对其隐藏。

持续更新的本地化项目

如果产品不断有新内容(字符串)更新,那么将这些更新应用于多个项目并保持同步就很困难。使用项目中的专用语言来维护它们。

遵循ISO标准的语言代码(例如en-US)不必是唯一的,因此同一语言的许多版本可以在一个项目中。使用唯一的语言名称区分地区、客户或受众。

设置时,默认区域中任何新引入的键将在其他语言中显示为未翻译,并因此进行本地化。如果与客户及其自己的译员合作,应特别分配给他们只能通过更新其用户个人资料或项目用户管理中的语言访问来编辑其语言版本。

为同一项目中工作审校工作流设置平行的本地化流程。这种灵活性还扩大到上传和下载语言文件或通过API实现自动化流程。

这篇文章有帮助吗?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.