Lingo.dev + XLIFF

Lingo.dev CLI 翻译 XLIFF(XML 本地化交换文件格式)文件,同时保留文档结构、翻译单元和工作流状态。CLI 支持 XLIFF 1.2 和 2.0 格式,维护源语言元数据,保留文件/组/单元层次结构,处理 XML 敏感内容的 CDATA 部分,并与专业翻译工作流和 CAT 工具集成。

快速设置

为 XLIFF 文件配置:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja"]
  },
  "buckets": {
    "xliff": {
      "include": ["localization/[locale].xliff"]
    }
  }
}

提醒[locale] 是一个占位符,在 CLI 运行期间会被实际的语言区域替换,因此应在配置中保持原样。

翻译 XLIFF 文件

npx lingo.dev@latest i18n

在翻译内容的同时保留 XLIFF 结构、翻译状态和专业翻译工作流元数据。

XLIFF 文件结构

XLIFF 1.2 格式

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
  <file original="app.strings" source-language="en" target-language="es" datatype="plaintext">
    <header></header>
    <body>
      <trans-unit id="welcome" resname="welcome.message">
        <source>Welcome to our application</source>
        <target state="translated">Bienvenido a nuestra aplicación</target>
      </trans-unit>
      <trans-unit id="login" resname="auth.login">
        <source>Log In</source>
        <target state="new"></target>
      </trans-unit>
    </body>
  </file>
</xliff>

XLIFF 2.0 格式

<?xml version="1.0" encoding="utf-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en">
  <file id="messages">
    <unit id="welcome">
      <segment>
        <source>Welcome to our application</source>
      </segment>
    </unit>
    <group id="auth">
      <unit id="login">
        <segment>
          <source>Log In</source>
        </segment>
      </unit>
    </group>
  </file>
</xliff>

键生成

XLIFF 键通过 URL 编码确定性生成:

XLIFF 1.2 键

  • 基于 resname 属性,其次是 id,然后是源文本
  • 简单格式:welcome.messageauth.login

XLIFF 2.0 键

  • 分层路径结构:resources/{fileId}/{groupPath}{unitId}/source
  • URL 编码路径:resources%2Fmessages%2Fauth%2FgroupUnits%2Flogin%2Fsource
  • 组通过 groupUnits 分隔符创建嵌套路径

XLIFF 特定功能

翻译状态

<!-- XLIFF 1.2 目标状态 -->
<target state="new">未翻译内容</target>
<target state="translated">已翻译内容</target>
<target state="reviewed">已审核翻译</target>
<target state="final">最终批准翻译</target>

翻译状态在处理过程中会被保留和更新。

源语言元数据

<!-- XLIFF 1.2 -->
<file source-language="en-US" target-language="es-ES">

<!-- XLIFF 2.0 -->
<xliff srcLang="en-US" trgLang="es-ES">

源语言信息会被自动保留和更新。

CDATA 区段

<source><![CDATA[包含 <tags> 和 "特殊" 字符的内容]]></source>

对于包含 XML 敏感字符的内容,会自动使用 CDATA 区段。

组组织

<!-- XLIFF 2.0 用于逻辑组织的组 -->
<group id="navigation">
  <unit id="home"><segment><source>Home</source></segment></unit>
  <unit id="settings"><segment><source>Settings</source></segment></unit>
</group>

分层组结构会被保留并反映在键路径中。

高级配置

多个 XLIFF 文件

"xliff": {
  "include": [
    "localization/app_[locale].xliff",
    "localization/ui_[locale].xliff"
  ]
}

文件扩展名

"xliff": {
  "include": [
    "translations/[locale].xliff",
    "translations/[locale].xlf"
  ]
}

支持 .xliff.xlf 扩展名。

锁定翻译单元

"xliff": {
  "include": ["localization/[locale].xliff"],
  "lockedKeys": ["app.version", "build.number"]
}

专业翻译工作流程

XLIFF 文件可无缝集成到以下流程中:

  • CAT(计算机辅助翻译)工具
  • 翻译管理系统(TMS)
  • 专业翻译工作流程
  • 质量保证流程
  • 翻译记忆系统

CLI 在启用 AI 驱动翻译以实现快速本地化的同时,保留所有工作流程元数据。