指南 · 源值
更新某个 key 的源值
用 create_key 或 create_keys_bulk 初始化一个 key,只会设置它的源值一次。用一个改动过的 source_value 重新运行不会有任何作用, 这是有意为之,以确保自动化 seed 永远不会覆盖源文本。下面介绍如何在 key 创建之后有意地更改它的源值。
你将会遇到的 no-op
create_key 和 create_keys_bulk 接受一个 source_value,但只有在它们真正创建该 key 时才会采纳它。在一个已存在的 key 上再次调用它们,新的 source_value 会被悄无声息地丢弃, 调用仍然成功,key 会带着 created: false 返回,源文本则保持不变。
create_keys_bulk 1// create_keys_bulk, source_value on a key that ALREADY exists2{ "items": [3 { "namespace": "common", "name": "checkout.title",4 "source_value": "Checkout" }5] } 7// → no update_source: the existing source is left untouched8{ "results": [{ "index": 0, "status": "ok", "created": false }] } 解决方案:update_source
在该 key 上添加 update_source: true, 它是一个按 key 的字段(在 create_key 上,或在 create_keys_bulk 的每个 items[] 条目上),绝非全局 flag。这样即便在已存在的 key 上,源值也会被 upsert(created 仍保持 false)。它是 opt-in 的,因此例行的重新 seed 永远不会意外更改源文本。
create_keys_bulk 1// update_source is a PER-ITEM flag, never a global one2{ "items": [3 { "namespace": "common", "name": "checkout.title",4 "source_value": "Checkout", "update_source": true }5] } 7// → created:false (the key existed) but the source is now upserted8{ "results": [{ "index": 0, "status": "ok", "created": false }] } 两者都通过 MCP surface 运行(一个 mcp:* scope 的 key),且项目必须已经有一个源语言。该更改会递增版本号,并被记录到 key 的历史中。
或者重新导入源语言
一次性 i18next 导入也会 upsert 源值。重新导入你的源语言文件会在单次调用中更新每一个已存在的源, 当源文本已经存在于你的仓库中时很方便。
terminal 1# or re-import your source-language files, import upserts source values2sonenta import "./locales/en/**/*.json" # en = your source language 会发生什么变化
- 已版本化且已审计。 新的源是一次正常的版本化编辑,归属到你的 API key,并会出现在 key 的历史中。
- 缺失 key 事件会解决。 针对这些 key 的未解决缺失 key 事件,会在一个真实的源值到达后自动解决。
- 按设计 opt-in。 若不带
update_source,已存在 key 上的source_value仍会被忽略, 重新运行你的 seed 脚本永远不会意外覆盖源文本。