Lingo.dev + .json5 (JSON5)

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

Быстрая настройка

Создайте конфигурационный файл i18n.json:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "json5": {
      "include": ["locales/[locale].json5"]
    }
  }
}

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

Перевод всего

npx lingo.dev@latest i18n

Автоматически обрабатывает функции синтаксиса JSON5, сохраняет комментарии и форматирование, а также обновляет только изменённый контент.

Поддержка синтаксиса JSON5

JSON5 расширяет JSON, добавляя удобный для разработчиков синтаксис:

{
  // Поддерживаются комментарии
  title: "Привет, мир!", // Работают однострочные комментарии
  description: 'Допустимы одинарные кавычки',
  unquoted: 'ключи работают без кавычек',
  trailing: 'запятая допустима',
  
  /* Блочные комментарии
     также поддерживаются */
  multiline: "Это \
длинная строка, которая \
распространяется на несколько строк",
  
  // Шестнадцатеричные числа
  hex_value: 0xDEADBEEF,
  positive: +123,
  
  nested: {
    key: 'значение',
  }, // Допустима завершающая запятая
}

Умное сохранение структуры

Сохраняет синтаксис JSON5 и соглашения фреймворков:

{
  nav: {
    home: "Главная",
    about: {
      team: "Наша команда"
    }
  },
  items: {
    one: "{{count}} элемент",
    other: "{{count}} элементов"
  },
  // Конфигурация остаётся неизменной
  version: 0x010203
}

Расширенная конфигурация

Исключение файлов

"json5": {
  "include": ["locales/[locale]/*.json5"],
  "exclude": ["locales/[locale]/config.json5"]
}

Блокировка технических ключей

"json5": {
  "lockedKeys": ["app/version", "settings/apiKey"]
}

Используйте прямой слэш (/) для путей вложенных ключей или звёздочку (*) для совпадения с несколькими путями ключей.

JSON5 против JSON

JSON5 обеспечивает улучшенный опыт разработчика, сохраняя полную совместимость с JSON:

  • Комментарии: Документируйте ваши переводы с помощью встроенных и блочных комментариев
  • Ключи без кавычек: Более чистый синтаксис без кавычек вокруг имен свойств
  • Завершающие запятые: Упрощенное редактирование и сравнение версий в системах контроля версий
  • Одинарные кавычки: Гибкость в использовании кавычек для строк
  • Многострочные строки: Лучшая читаемость для длинного текста
  • Форматы чисел: Шестнадцатеричные, положительные знаки и другие

Все файлы JSON являются допустимыми JSON5, что делает миграцию бесшовной.