Блокировка ключей

Lingo.dev CLI позволяет блокировать определённые ключи перевода, чтобы их значения оставались идентичными во всех языках. При блокировке ключей CLI исключает их из процесса перевода и копирует исходные значения напрямую во все целевые файлы.

Настройка блокировки ключей

Добавьте lockedKeys в конфигурацию вашего bucket в файле i18n.json:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"],
      "lockedKeys": ["system/component", "config/engine", "modules/processor"]
    }
  }
}

Массив lockedKeys использует обозначение с косой чертой (/) для указания вложенных ключей.

Как работает блокировка ключей

Во время процесса перевода Lingo.dev CLI:

  1. Определяет заблокированные ключи из вашей конфигурации
  2. Исключает их из перевода — заблокированный контент никогда не отправляется в AI-модели
  3. Копирует исходные значения напрямую во все целевые файлы
  4. Обеспечивает консистентность во всех языках

Пример рабочего процесса:

// locales/en.json (исходный файл)
{
  "welcome": "Welcome to our platform",
  "system": {
    "component": "Lingo.dev CLI",
    "processor": "Translation Engine"
  },
  "config": {
    "engine": "Lingo.dev Engine"
  }
}

С конфигурацией заблокированных ключей:

{
  "lockedKeys": ["system/component", "system/processor", "config/engine"]
}

Сгенерированный перевод на испанский:

// locales/es.json (сгенерировано)
{
  "welcome": "Bienvenido a nuestra plataforma",
  "system": {
    "component": "Lingo.dev CLI",
    "processor": "Translation Engine"
  },
  "config": {
    "engine": "Lingo.dev Engine"
  }
}

Только welcome переводится, в то время как заблокированные ключи остаются идентичными исходному файлу.

Без блокировки ключей "Lingo.dev Engine" могло бы быть неправильно переведено как "Двигатель Lingo.dev" на русском или "Lingo.devエンジン" на японском, чего мы не хотим в этом примере.

Вложенные пути ключей

Используйте обозначение с косой чертой (/), чтобы блокировать ключи на любой глубине:

{
  "lockedKeys": [
    "system/engine/component",
    "modules/ai/processor",
    "config/translation/handler"
  ]
}

Это обозначение работает с сложными вложенными структурами:

// Исходная структура
{
  "system": {
    "engine": {
      "component": "Lingo.dev Engine"
    }
  }
}

Путь system/engine/component блокирует значение имени компонента.

Ключи с точками

Обозначение с косой чертой обрабатывает ключи, содержащие точки в их названиях:

// Исходные данные с ключами, содержащими точки
{
  "modules": {
    "ai.translation": "AI Translation",
    "content.processor": "Content Processor"
  }
}

Заблокируйте эти ключи с помощью:

{
  "lockedKeys": ["modules/ai.translation", "modules/content.processor"]
}

Несколько типов хранилищ

Разные форматы файлов могут иметь разные заблокированные ключи:

{
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"],
      "lockedKeys": ["config/engine", "system/component"]
    },
    "yaml": {
      "include": ["translations/[locale].yml"],
      "lockedKeys": ["service/name", "module/title"]
    }
  }
}

Каждый тип хранилища поддерживает собственный список заблокированных ключей в зависимости от структуры содержимого.