Руководство · Исходные значения
Обновление исходного значения ключа
Инициализация ключа через create_key или create_keys_bulk задаёт его исходное значение лишь однажды. Повторный запуск с изменённым source_value ничего не делает, это сделано намеренно, чтобы автоматический seed никогда не затирал исходный текст. Вот как намеренно изменить исходное значение ключа после его создания.
No-op, с которым вы столкнётесь
create_key и create_keys_bulk принимают source_value, но учитывают его только тогда, когда фактически создают ключ. Вызовите их снова для уже существующего ключа, и новый source_value молча отбрасывается, вызов всё равно успешен, ключ возвращается с 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
Добавьте update_source: true к ключу, это поле на уровне ключа (в create_key или в каждой записи items[] у create_keys_bulk), а не глобальный флаг. Тогда исходное значение обновляется даже у существующего ключа (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 (ключ со скоупом mcp:*), и у проекта уже должен быть исходный язык. Изменение увеличивает версию и записывается в историю ключа.
Или переимпортируйте исходный язык
Однопроходный импорт i18next также обновляет исходные значения. Повторный импорт ваших файлов исходного языка обновляет все существующие исходники одним вызовом, удобно, когда исходный текст уже живёт в вашем репозитории.
terminal 1# or re-import your source-language files, import upserts source values2sonenta import "./locales/en/**/*.json" # en = your source language Что меняется
- Версионируется и аудируется. Новый исходник, это обычная версионированная правка, приписанная вашему ключу API, и появляется в истории ключа.
- События об отсутствующих ключах разрешаются. Открытые события об отсутствующих ключах для этих ключей разрешаются автоматически, как только приходит настоящее исходное значение.
- Opt-in по замыслу. Без
update_sourcesource_valueдля существующего ключа остаётся проигнорированным, повторный запуск вашего seed-скрипта никогда не перезапишет исходный текст случайно.