Перейти к содержимому
Sonenta

Руководство · Исходные значения

Обновление исходного значения ключа

Инициализация ключа через 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_source source_value для существующего ключа остаётся проигнорированным — повторный запуск вашего seed-скрипта никогда не перезапишет исходный текст случайно.

Далее