跳转至

project.yaml 配置说明

中文 | English

阅读方式

project.yaml 描述“翻译什么、用什么规则和模型、把结果放哪里”。它不保存 API 密钥,也不保存运行状态。

配置使用严格 schema:未知字段、拼错字段和不合法组合会在 validate-config 阶段报错。所有相对路径均以 project.yaml 所在目录为基准。

先从 projects/example/project.yaml 复制,再按本文修改。不要一开始就启用远端发布、AES 或旧系统迁移等高级能力。

一份可读的最小配置

schema_version: 1

project:
  id: my-project             # 稳定机器标识;建库后不要随意修改
  name: My Project           # 展示名称
  game_version: 1.0.0        # 游戏/资源版本;不要写开头的 v

paths:
  source: ./source           # 原始资源,只读输入
  workspace: ../../var/my-project/workspace
  output: ../../var/my-project/output

languages:
  source: en-US
  target: zh-Hans

resources:
  adapters:
    - type: gettext
      include: ["**/*.po", "**/*.mo"]
      exclude: []
      options:
        layout: standard
        empty_source: skip
        source_filter: all

prompt:
  template: ./prompt.md
  background: ./background.md

glossary:
  file: ./glossary.yaml
  auto_discovery: candidate_only

rules:
  file: ./rules.yaml

provider:
  type: openai_compatible
  base_url: https://api.example.com/v1
  api_key_env: LOCALIZER_API_KEY
  model: provider-model-name
  concurrency: 4
  timeout_seconds: 120
  context_window: 32768
  max_output_tokens: 4096

tm:
  database: ../../var/my-project/localizer.sqlite
  global_exact_match: reviewed_only
  commit_policy: quality_gate

workflow:
  mode: local

build:
  format: zip
  release_channel: stable
  artifact_prefix: localization
  compression: deflate
  encryption: none

publish:
  targets:
    - type: local
      destination: ../../releases/my-project
      versioned_prefix: true

配置字典

schema_version

字段 必填 语义
schema_version 当前只能为 1。它是配置格式版本,不是游戏版本。

project

字段 必填 语义
id 项目的稳定 ID,参与 TM 坐标。开始积累 TM 后修改它会让旧记录无法按原坐标命中。
name 面向人的展示名称,不参与路径和 TM 身份计算。
game_version 本轮资源/游戏版本,进入制品元数据和发布身份。允许字母、数字、点、横线、下划线;不要以 v 开头。

paths

字段 必填 语义
source 二选一 单资源目录。简单项目优先使用。
sources 二选一 变体名: 目录 映射,用于正式/测试、渠道或平台等并行资源。
default_variant 未传 --variant 时默认选择的 sources 键。多个变体且无默认值时必须在命令行选择。
workspace checkpoint、运行状态、报告、备份等中间数据的根目录。
output 渲染后的资源、preview/release 制品及 manifest 的根目录。

sourcesources 至少提供一个。使用 sources 后,各变体的 workspace/output 自动放到同名子目录,但 TM、术语和规则仍共享。

cache

字段 默认值 语义
root ../../var/cache 可再生成缓存的根目录;Hugging Face 快照放在其 tokenizers 子目录。
scope shared 缓存归属提示,可为 sharedproject。当前路径隔离仍由 root 决定;选择 project 时应同时给该项目独立的 root

缓存不应提交到 Git。

environment

字段 默认值 语义
dotenv_files [] 显式加载的 .env 文件列表。
auto_discover false 从配置目录向仓库根方向查找 .env
override_existing false .env 是否覆盖进程中已存在的环境变量。建议保持 false

YAML 中所有 *_env 字段都只能写大写环境变量名,例如 LOCALIZER_API_KEY,不能直接写密钥。

languages

字段 必填 语义
source 源语言 locale,例如 en-US。用于 TM 元数据和语言规则选择。
target 目标语言 locale,例如 zh-Hans

locale 是项目语义,不会自动决定某个资源适配器的目录布局;特殊目录映射在 adapter options 中配置。

resources.adapters[]

通用字段:

字段 默认值 语义
type 已注册适配器名:gettextparatranz_jsonparadox_yml
include ["**/*"] 相对于 source 的包含 glob。
exclude [] 排除 glob,适合忽略备份、临时或不应翻译的文件。
options {} 适配器专属选项,未知字段同样会报错。

Gettext 选项:

字段 默认值 语义
layout standard standard 表示 msgid 是源文、msgstr 是译文;keyed_source 表示 msgid 是稳定键、msgstr 是待翻译源文。
empty_source skip 源文为空时跳过;设为 error 则把它当配置/数据错误。
source_filter all all 处理所有源文;cyrillic_without_cjk 是旧兼容过滤策略,通用项目通常不应启用。

ParaTranz JSON 选项用于映射 key_fieldsource_fieldtranslation_fieldcontext_fieldstage_fieldid_field。前三个字段名必须互不相同。

Paradox YAML 的 locale_folderslocale: 安全目录名 映射,用于项目目录名与标准 locale 不一致的情况。

prompt

字段 必填 语义
template 项目级翻译要求:目标语言、语气、专名和格式约束。流水线会在其外部组装批次数据。
background 世界观、UI 场景、角色关系等背景。不要放凭据或会频繁变化的运行数据。

提示词应明确要求保留占位符,但不要在这里复制整份术语表;术语应由 glossary.file 结构化维护。

glossary

字段 默认值 语义
file 术语 YAML 路径。即使没有术语,也应提供 schema_version: 1 和空 terms
auto_discovery candidate_only candidate_only 表示自动发现结果只能作为候选,不能自动晋升为强制术语;disabled 关闭候选发现策略。

术语自身可声明 exact/word 匹配、locale、审核状态、来源及可选路径 scope。参考 projects/example/glossary.yaml

rules

file 指向 QA、过滤和规范化规则。空规则文件至少包含:

schema_version: 1

可配置源语言残留画像、允许保留词、按 adapter/path/key/source 过滤的条目,以及按 adapter/path 生效的规范化正则。参考 projects/example/rules.yaml。过滤规则会让命中项不送模型也不参与 QA,应谨慎使用。

provider

字段 默认值 语义
type openai_compatible 当前唯一 provider 类型。
base_url API 根地址,程序会追加 /chat/completions。不要把完整的该端点重复写两次。
api_key_env API 密钥所在的环境变量名。
model 服务端模型 ID。
temperature 0.3 请求温度。稳定翻译通常保持较低。
timeout_seconds 120 单次请求超时秒数。
concurrency 4 并行处理资源组的最大 worker 数;同一 SQLite 的最终写入仍受控。
rpm / tpm 预留的请求/Token 限额字段。当前 runner 尚未把它们接入限流器,不能把填写它们当作已生效的供应商限流保护。
context_window 32000 模型总上下文窗口,用于本地组批。
max_output_tokens 4096 每次请求最大输出 token,必须小于 context_window
custom_parameters {} 合并到请求 JSON 的供应商扩展参数,例如 top_p。不能覆盖 model/messages/max_tokens/temperature 等框架字段,也不能包含凭据。

可选 tokenizer:

provider:
  tokenizer:
    type: huggingface
    model: organization/tokenizer-repository
    revision: pinned-revision
    local_files_only: false

保留这个块就必须安装 .[tokenizer-huggingface]model 是 tokenizer 身份,与上面的服务端 model 独立;删除整个块则使用保守估算器。

tm

字段 默认值 语义
database SQLite 文件路径。首次写流程自动创建。
global_exact_match reviewed_only 跨坐标相同源文复用策略。disabled 禁用;reviewed_only 只复用人工审核记录;reviewed_or_legacy_converged 还允许已收敛的旧记录。
commit_policy quality_gate 当前唯一策略:机器结果通过质量闸门后才成为正式 TM。

同一个 SQLite 可以给同项目的多个资源变体使用,但不建议让不同 project.id 共用同一条无治理的数据库路径。

quality_gate

legacy_debt_baseline 是可选的历史问题基线文件。未配置时,release 对所有新增 error 零容忍。配置后也不会放过本次机器翻译产生的新 error,只允许明确登记的存量债务暂时存在。

workflow

本地项目使用:

workflow:
  mode: local

paratranz 模式还要求 project_idtoken_env,可声明 minimum_release_stagesync.dry_run_by_default/delete_policy。当前仓库只有配置模型和离线同步组件,在线 API 客户端尚未实现,因此新项目不要把它当作可直接运行的在线工作流。

build

字段 默认值 语义
format zip 当前只支持 zip。
release_channel local-release 写入构建元数据的发布通道名,如 stable/beta。
variant 公开制品身份中的变体名;与 paths.sources 的资源变体不是同一概念。
artifact_prefix i18n 制品文件名前缀。
compression deflate deflatelzmastored。兼容优先选 deflate。
encryption none noneaes256。AES 需要 .[artifact-aes]
password_env AES 密码的环境变量名;仅在 aes256 时允许。
archive_root 压缩包内部统一增加的安全相对路径前缀。

compatibility_metadata 用于需要旧版 metadata.json 的下游:enabled 开关、format 当前只能是 legacy_v6filename 是包内文件名、env 是下游环境标识。通用新项目保持关闭。

variant_overridespaths.sources 的资源变体映射为公开发布身份:

build:
  variant_overrides:
    stable:
      variant: desktop
      compatibility_env: DESKTOP

映射键必须是已声明的 source 变体。

review

字段 默认值 语义
decisions_file 项目默认位置 append-only 人工决策日志的基准路径;实际按月分片。
reviewer 当前 OS 用户 Dashboard 修订记录中的操作者显示名,不是认证身份。

security

credential_rotation_required 默认是 false,表示没有声明凭据泄露或强制轮换事件,不会仅因轮换记录为空而拦截远端发布。确认发生泄露、误提交或强制轮换时将它设为 true;此后必须同时填写 credential_rotation_completed_atrotation_record 才会重新放行远端目标。不要为了通过校验而填写虚假值。

publish.targets[]

共同字段:type 选择发布器,prefix 是目标内前缀,versioned_prefix 决定是否追加版本化路径,timeout_seconds 是远端超时。

类型 必需字段 对应可选依赖
local destination
github_release repository, token_envtag 可选 无额外 Python 包
cloudflare_r2 bucket, access_key_env, secret_key_env,以及 account_idendpoint_url publish-r2
alibaba_oss endpoint, bucket, sts_token_url, sts_token_envsts_token_header 可选 publish-oss

所有凭据字段保存的都只是环境变量名。

配置修改后的验证顺序

localizer validate-config projects/my-project/project.yaml
localizer scan projects/my-project/project.yaml
localizer dashboard projects/my-project/project.yaml --host 127.0.0.1 --port 8765

先让结构校验通过,再检查扫描数量,最后看 Dashboard 预检。这样可以把 YAML 错误、资源匹配错误和运行时依赖错误分开定位。