IDE расширения

Поддержка международных сообщений в экосистеме FormatJS тесно связана с инструментами разработки, которые интегрируются непосредственно в IDE и редакторы кода. Основная цель таких расширений — уменьшить количество ошибок в ICU-сообщениях, ускорить разработку и обеспечить согласованность переводов на уровне исходного кода.

ICU MessageFormat является ядром работы FormatJS. Сообщения вида:

{
  greeting: "Hello, {name}!"
}

или более сложные конструкции:

{
  inbox: "You have {count, plural, one {# message} other {# messages}}"
}

требуют корректной интерпретации редактором.

Расширения IDE обеспечивают:

  • Подсветку плейсхолдеров {variable}
  • Разметку ветвлений plural, select, selectordinal
  • Выделение синтаксических ошибок ICU
  • Подсветку вложенных конструкций

Ключевой эффект — снижение числа ошибок, связанных с неправильной вложенностью или пропущенными вариантами pluralization.

Расширения для Visual Studio Code

В экосистеме FormatJS именно VS Code обладает наиболее зрелой поддержкой через набор расширений и интеграций.

FormatJS Message Syntax Highlighting

Поддержка синтаксиса ICU позволяет:

  • визуально различать ключевые части сообщения
  • видеть структуру plural/select выражений
  • быстро находить несоответствия фигурных скобок

Особенно важно при работе с длинными сообщениями:

{
  cart: "You have {count, plural,
    =0 {no items}
    one {# item}
    other {# items}
  } in your cart"
}

Без подсветки такие конструкции легко становятся источником логических ошибок.

ESLint интеграция через eslint-plugin-formatjs

Одним из ключевых инструментов является eslint-plugin-formatjs, который встраивается в процесс редактирования через IDE.

Он обеспечивает:

  • проверку наличия всех параметров ICU
  • контроль корректности plural категорий
  • выявление неиспользуемых или лишних аргументов
  • проверку корректности сообщений при использовании react-intl

Пример правила:

{
  "rules": {
    "formatjs/no-missing-params": "error",
    "formatjs/enforce-placeholders": "warn"
  }
}

IDE отображает ошибки прямо в редакторе, предотвращая попадание некорректных сообщений в сборку.

Автодополнение сообщений

Расширения FormatJS в IDE могут предоставлять автодополнение для:

  • ключей переводов
  • параметров сообщений
  • ICU-сегментов (plural, select, offset)

Пример сценария: при вводе

formatMessage({
  id: "cart."
})

IDE может предложить:

  • cart.items
  • cart.empty
  • cart.totalPrice

Это достигается через анализ JSON/AST файлов локализации.

Интеграция с react-intl

При использовании react-intl IDE расширения анализируют JSX-код:

<FormattedMessage
  id="welcome.user"
  values={{ name: user.name }}
/>

Поддерживается:

  • проверка соответствия values и ICU-плейсхолдеров
  • предупреждения о лишних параметрах
  • контроль типов при использовании TypeScript

В TypeScript-проектах это усиливается типизацией через MessageDescriptor.

Проверка ICU выражений в реальном времени

IDE может выполнять парсинг ICU-сообщений на лету.

Поддерживаются проверки:

  • корректность вложенных фигурных скобок
  • допустимость категорий plural (one, other, few, many, zero)
  • правильность select-ветвлений
  • отсутствие синтаксических разрывов

Ошибочные конструкции подсвечиваются сразу:

{
  test: "Items: {count, plural, one {# item} other {# items}"
}

Ошибка: отсутствует закрывающая скобка.

Инструменты извлечения сообщений

FormatJS активно использует CLI-инструменты, которые интегрируются с IDE через задачи (tasks) или плагины.

babel-plugin-react-intl

Используется для автоматического извлечения сообщений:

<FormattedMessage
  id="app.header.title"
  defaultMessage="Dashboard"
/>

IDE может:

  • подсвечивать извлекаемые строки
  • показывать предупреждения о неэкспортируемых сообщениях
  • синхронизировать JSON-файлы локализации

formatjs CLI интеграция

CLI-команды:

  • formatjs extract
  • formatjs compile
  • formatjs validate

могут запускаться из IDE как background tasks.

Поддержка JSON и ICU файлов переводов

IDE расширения анализируют структуры:

{
  "cart.items": "You have {count} items"
}

и обеспечивают:

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

При работе с большими проектами IDE сравнивает языковые файлы и подсвечивает:

  • отсутствующие ключи
  • лишние ключи
  • несоответствие структуры сообщений

Интеграция с TypeScript

FormatJS тесно работает с TypeScript через типизацию сообщений.

IDE поддерживает:

  • проверку MessageDescriptor
  • вывод типов параметров сообщений
  • автодополнение values в formatMessage

Пример:

formatMessage({
  id: "user.profile",
  defaultMessage: "User {name}"
}, {
  name: user.name
});

IDE проверяет:

  • наличие name в ICU
  • соответствие типа значения
  • отсутствие лишних параметров

Навигация по сообщениям

IDE расширения предоставляют:

  • переход к определению сообщения по id
  • поиск использования переводов
  • рефакторинг ключей локализации

Функциональность особенно важна при масштабировании приложений с тысячами сообщений.

Рефакторинг и массовые изменения

Поддерживаются операции:

  • переименование ключей переводов
  • перенос сообщений между файлами
  • автоматическое обновление ICU-синтаксиса

IDE анализирует AST и гарантирует, что изменения не нарушают структуру сообщений.

Диагностика проблем интернационализации

IDE-инструменты FormatJS способны выявлять архитектурные проблемы:

  • отсутствие fallback-языков
  • дублирование сообщений
  • слишком длинные ICU-конструкции
  • неправильное использование pluralization в разных локалях

Такие проверки выполняются либо через ESLint, либо через специализированные плагины анализа.

Работа с монорепозиториями

В монорепозиториях IDE расширения обеспечивают:

  • централизованный анализ переводов
  • кэширование ICU-парсинга
  • совместимость между пакетами

Особенно важно при использовании общих библиотек UI-компонентов с локализацией.

Производительность IDE при работе с FormatJS

При большом количестве сообщений важны оптимизации:

  • инкрементальный парсинг ICU
  • кеширование AST переводов
  • ограничение глубины анализа вложенных сообщений

Без этих механизмов анализ ICU может замедлять редактор.

Поддержка линтинга на уровне редактора

Линтинг FormatJS в IDE объединяет:

  • ESLint правила
  • ICU parser проверки
  • TypeScript анализ
  • JSON schema validation

В результате ошибки отображаются в едином формате независимо от источника проверки.

Интеграция с системой сборки

IDE расширения часто синхронизируются с build-процессом:

  • предупреждают о несоответствии сообщений перед сборкой
  • показывают статус извлечения переводов
  • отображают ошибки компиляции ICU заранее

Это снижает вероятность runtime-ошибок в production-среде.