|Labs
Заказать демоПлатформа
React (Lingo Compiler)
Альфа
React (MCP)React (i18n)CLI прежней версии (v0)
Устаревшее

Lingo.dev CLI

  • Как это работает
  • Настройка
  • Быстрый старт
  • Монорепозитории

Конфигурация

  • Поддерживаемые форматы
  • i18n.json
  • i18n.lock
  • Поддерживаемые локали

Возможности

  • Существующие переводы
  • Добавление языков
  • Переопределения
  • Примечания для переводчика
  • Ключи перевода
  • Переименование ключей
  • Блокировка ключей
  • Игнорирование ключей
  • Сохранение ключей
  • Извлечение ключей с помощью ИИ

Производительность

  • Крупные проекты
  • Параллельная обработка
  • Оценка стоимости

Повторный перевод

  • Автоматический повторный перевод
  • Повторный перевод
  • Удаление переводов

Эта документация посвящена CLI прежней версии (v0) и считается устаревшей. Текущая версия CLI — v1. См. документацию по текущей версии CLI

Поддерживаемые форматы

CLI Lingo.dev использует типы bucket для разбора и перевода файлов разных форматов. Каждый тип bucket — это отдельный парсер, созданный под конкретный формат. Настройте один или несколько bucket в i18n.json, чтобы указать, какие файлы должен переводить CLI.

Типы bucket#

Тип bucketФорматРежим вывода[locale] обязателен
jsonФайлы JSONОтдельные файлы для каждой локалиДа
json5Файлы JSON5Отдельные файлы для каждой локалиДа
jsoncФайлы JSONC (с комментариями)Отдельные файлы для каждой локалиДа
json-dictionaryJSON-словари (плоские пары ключ-значение)Отдельные файлы для каждой локалиДа
yamlФайлы YAMLОтдельные файлы для каждой локалиДа
yaml-root-keyYAML с корневыми ключами локалейИзменяет исходный файлНет
markdownФайлы MarkdownОтдельные файлы для каждой локалиДа
mdxФайлы MDXОтдельные файлы для каждой локалиДа
markdocФайлы MarkdocОтдельные файлы для каждой локалиДа
htmlФайлы HTMLОтдельные файлы для каждой локалиДа
mjmlEmail-шаблоны в MJMLОтдельные файлы для каждой локалиДа
androidРесурсы Android XMLОтдельные файлы для каждой локалиДа
xcode-stringsФайлы Xcode .stringsОтдельные файлы для каждой локалиДа
xcode-stringsdictФайлы Xcode .stringsdictОтдельные файлы для каждой локалиДа
xcode-xcstringsКаталоги Xcode .xcstringsИзменяет исходный файлНет
flutterФайлы Flutter ARBОтдельные файлы для каждой локалиДа
poФайлы GNU gettext POОтдельные файлы для каждой локалиДа
propertiesФайлы Java .propertiesОтдельные файлы для каждой локалиДа
csvФайлы CSVИзменяет исходный файлНет
csv-per-localeФайлы CSV (по одному на локаль)Отдельные файлы для каждой локалиДа
xmlУниверсальные XML-файлыОтдельные файлы для каждой локалиДа
xliffФайлы XLIFFОтдельные файлы для каждой локалиДа
srtФайлы субтитров SRTОтдельные файлы для каждой локалиДа
vttФайлы субтитров VTTОтдельные файлы для каждой локалиДа
phpМассивы локализации PHPОтдельные файлы для каждой локалиДа
typescriptФайлы TypeScriptОтдельные файлы для каждой локалиДа
vue-jsonJSON-блоки Vue i18nОтдельные файлы для каждой локалиДа
txtТекстовые файлыОтдельные файлы для каждой локалиДа

Режимы вывода#

Bucket работают в одном из двух режимов вывода:

Отдельные файлы для каждой локали — CLI создаёт отдельный файл для каждого целевого языка. В шаблонах include должен быть плейсхолдер [locale]:

json
{
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"]
    }
  }
}

В результате появятся locales/en.json, locales/es.json, locales/fr.json и т. д.

Изменяет исходный файл — CLI записывает переводы в тот же файл, где находится исходный контент. Плейсхолдер [locale] в этом случае не используется:

json
{
  "buckets": {
    "csv": {
      "include": ["translations.csv"]
    }
  }
}

В CSV-файлах все локали обычно хранятся в столбцах одного файла. Каталоги Xcode .xcstrings и YAML с корневыми ключами работают по тому же принципу.

Примеры конфигурации#

Веб-приложение с JSON#

json
{
  "buckets": {
    "json": {
      "include": ["src/locales/[locale].json"],
      "lockedKeys": ["brand/name"]
    }
  }
}

Документационный сайт на Markdown#

json
{
  "buckets": {
    "markdown": {
      "include": ["docs/[locale]/*.md"],
      "exclude": ["docs/[locale]/drafts/*.md"]
    }
  }
}

Мобильное приложение (iOS + Android)#

json
{
  "buckets": {
    "xcode-xcstrings": {
      "include": ["ios/Localizable.xcstrings"]
    },
    "android": {
      "include": ["android/app/src/main/res/values-[locale]/strings.xml"]
    }
  }
}

Монорепозиторий с несколькими форматами#

json
{
  "buckets": {
    "json": {
      "include": ["apps/web/locales/[locale].json"]
    },
    "mdx": {
      "include": ["packages/docs/content/[locale]/*.mdx"]
    },
    "flutter": {
      "include": ["apps/mobile/lib/l10n/app_[locale].arb"]
    }
  }
}

Возможности отдельных bucket#

Некоторые bucket поддерживают дополнительные возможности помимо шаблонов include/exclude:

ВозможностьПоддерживаемые bucketОписание
Блокировка ключейФорматы «ключ-значение» (JSON, YAML и т. д.)Копирует исходные значения без перевода
Игнорирование ключейФорматы «ключ-значение»Полностью исключает ключи из целевых файлов
Сохранение ключейФорматы «ключ-значение»Инициализирует один раз, а затем защищает от обновлений
Примечания для переводчикаJSONC, XCStringsДобавляет контекст через комментарии, чтобы улучшить качество перевода

Правила шаблонов include#

  • Шаблоны задаются относительно расположения файла i18n.json
  • Используйте [locale] как плейсхолдер для кодов локалей (обязательно для bucket с режимом «отдельные файлы для каждой локали»)
  • Звёздочка (*) соответствует любому имени файла: locales/[locale]/*.json
  • Рекурсивные шаблоны (**) соответствуют файлам на любой глубине: src/**/[locale].json, config/locales/**/[locale].yml. Если шаблон использует **, то node_modules, .git, dist, build, .next и .turbo исключаются по умолчанию — при необходимости добавьте свои записи exclude (требуется CLI 0.135.0+)
  • Расширения файлов не влияют на разбор — парсер определяется типом bucket

Что дальше#

i18n.json
Полный справочник по конфигурации
Key Locking
Защитите отдельные ключи от перевода
Existing Translations
Подключите CLI к проекту, в котором уже есть переводы
Setup
Установите и настройте CLI

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 6 дней назад·4 минуты чтения