Исследование решений i18n для перевода вашего React Native приложения

    В условиях все более глобального рынка предоставление вашего React Native приложения на нескольких языках может значительно улучшить доступность и удовлетворение пользователей. Интернационализация (i18n) является центральной для эффективного управления переводами, позволяя вам отображать текст, форматы дат и времени, валюту и многое другое, специфичное для языка, без усложнения вашего кода. В этой статье мы рассмотрим различные подходы к i18n, начиная от специализированных библиотек до более общих решений, и поможем вам найти то, что лучше всего соответствует вашему проекту React Native.


    i18n illustration

    Что такое интернационализация (i18n)?

    Интернационализация, или i18n, включает в себя структурирование приложения так, чтобы оно могло легко адаптироваться к различным языкам, региональным форматам и культурным нормам. В React Native i18n включает в себя обработку строк для кнопок и меток, а также форматирование дат, времени, валют и многого другого в соответствии с локалью пользователя. Правильно подготовленные приложения React Native позволяют вам без проблем интегрировать дополнительные языки и специфическое поведение для локали позже — без серьезных рефакторов.

    Для более глубокого погружения в концепции интернационализации ознакомьтесь с нашей статьей:
    Что такое интернационализация (i18n)? Определение и проблемы.


    Проблема перевода для приложений React Native

    Работа с переводами в React Native вводит свои уникальные соображения:

    • Компонентная архитектура
      Как и в React для веба, модульный дизайн React Native может разбросать текст по многочисленным компонентам. Крайне важно централизовать эти переводы надежным образом.

    • Офлайн и удаленные данные
      В то время как некоторые строки могут быть встроены в приложение, другой контент (например, новостные ленты, данные о продуктах) может загружаться удаленно. Обработка переводов для данных, которые приходят асинхронно, может быть более сложной на мобильных устройствах.

    • Специфические для платформы действия
      iOS и Android имеют свои локальные настройки и особенности форматирования. Обеспечение согласованного отображения дат, валют и чисел на обеих платформах требует тщательного тестирования.

    • Управление состоянием и навигацией
      Поддержание выбранного пользователем языка на экранах, глубоких ссылках или навигации на основе вкладок означает интеграцию i18n в ваше решение для управления состоянием, такое как Redux или Context API.

    • Обновления приложений и обновления по воздуху (OTA)
      Если вы используете CodePush или другой механизм обновления OTA, вам нужно спланировать, как обновления перевода или новые языки будут доставляться без необходимости полного обновления в магазине приложений.


    Ведущие решения i18n для React Native

    Ниже представлены несколько популярных подходов к управлению многоязычным контентом в React Native. Каждый из них направлен на упрощение вашего рабочего процесса перевода различными способами.

    1. Intlayer

    Вебсайт: /

    Обзор
    Intlayer — это инновационная, открытая библиотека интернационализации, разработанная для оптимизации поддержки многоязычности в современных JavaScript-приложениях, включая React Native. Она предлагает декларативный подход к переводу, позволяя вам определять словари непосредственно рядом с компонентами.

    Ключевые особенности

    • Декларация перевода
      Храните переводы в одном файле или на уровне компонента, что делает их легко находимыми и редактируемыми.

    • TypeScript и автозаполнение
      Автоматически генерирует определения типов для ключей перевода, обеспечивая удобное автозаполнение и надежную проверку ошибок.

    • Легковесность и гибкость
      Работает в React Native без лишней нагрузки. Легко интегрировать и поддерживать эффективность на мобильных устройствах.

    • Специфические для платформы соображения
      Вы можете адаптировать или разделить строки, специфичные для платформы iOS и Android, если это необходимо.

    • Асинхронная загрузка
      Динамически загружайте словари перевода, что может быть полезно для крупных приложений или при поэтапном вводе языков.

    Соображения

    • Сообщество и экосистема
      Это относительно новое решение, поэтому вы можете обнаружить меньше примеров, созданных сообществом, или готовых плагинов по сравнению с давно устоявшимися библиотеками.

    2. React-i18next

    Вебсайт: https://react.i18next.com/

    Обзор
    React-i18next строится на популярном фреймворке i18next, предлагая гибкую архитектуру на основе плагинов и обширный набор функций. Он также широко используется в приложениях React Native благодаря хорошо документированному процессу настройки.

    Ключевые особенности

    • Плавная интеграция с React Native
      Предоставляет хуки (useTranslation), высшие компоненты (HOCs) и многое другое, чтобы интегрировать i18n в ваши компоненты без усилий.

    • Асинхронная загрузка
      Загружайте переводы по мере необходимости — полезно для крупных приложений или при добавлении новых языковых пакетов со временем.

    • Богатые возможности перевода
      Обрабатывайте вложенные переводы, интерполяцию, плюрализацию и замену переменных из коробки.

    • TypeScript и автозаполнение
      React-i18next поддерживает типизированные ключи перевода, хотя первоначальная настройка может быть более ручной по сравнению с решениями, которые автоматически генерируют типы.

    • Независимость от платформы
      i18next не привязан конкретно к вебу или мобильным устройствам, так что одна и та же библиотека может использоваться для разных типов проектов (например, если вы делитесь кодом между вебом и нативными приложениями).

    Соображения

    • Сложность конфигурации
      Настройка i18n с расширенными функциями (плюрализация, резервные локали и т. д.) может требовать тщательной настройки.

    • Производительность
      Хотя React-i18next в целом работает хорошо, вам следует обратить внимание на то, как вы организуете и загружаете ресурсы перевода, чтобы избежать излишней нагрузки на мобильные устройства.


    3. React Intl (от FormatJS)

    Вебсайт: https://formatjs.io/docs/react-intl/

    Обзор
    React Intl, часть экосистемы FormatJS, основан на стандартизации форматирования сообщений для различных локалей. Он акцентирует внимание на рабочем процессе извлечения сообщений и особенно силен в корректном форматировании дат, чисел и времени для широкого диапазона локалей.

    Ключевые особенности

    • Компоненты, ориентированные на форматирование
      <FormattedMessage>, <FormattedDate>, <FormattedTime> и другие упрощают задачи форматирования как на iOS, так и на Android.

    • Легковесность и расширяемость
      Вы можете импортировать только те части FormatJS, которые вам нужны, сохраняя общий пакет легким — это важно для мобильных устройств.

    • Полифилы для неподдерживаемых локалей
      Обеспечивает согласованное форматирование дат/чисел на старых версиях Android или iOS.

    • Совместимость с TypeScript
      Интегрируется с TypeScript, хотя для достижения полной типизации идентификаторов сообщений могут понадобиться дополнительные инструменты.

    Соображения

    • Извлечение сообщений
      Требует рабочего процесса извлечения, что может добавить сложности в ваш процесс сборки. Однако это мощно для больших команд, управляющих множеством переводов.

    • Размер приложения и развертывания
      Если вы полагаетесь на множество полифилов или большие файлы перевода, следите за общим размером вашего приложения — это особенно важно в мобильных контекстах.

    • Примеры сообщества
      Хотя библиотека широко используется, примеров специфического использования для React Native может быть меньше, чем для React веб. Вам, вероятно, потребуется адаптировать существующую документацию и шаблоны для работы в среде нативного приложения.


    4. LinguiJS

    Вебсайт: https://lingui.js.org/

    Обзор
    LinguiJS предлагает современный, ориентированный на разработчика подход к i18n для JavaScript и React (включая React Native). Благодаря извлечению сообщений и компиляции на основе CLI он фокусируется на минимизации накладных расходов во время выполнения.

    Ключевые особенности

    • Автоматическое извлечение сообщений
      Сканирует ваш код на наличие строк перевода, снижая риск пропуска или неиспользования сообщений.

    • Минимальные накладные расходы во время выполнения
      Скомпилированные переводы поддерживают производительность вашего приложения и хорошо оптимизированы для мобильных устройств.

    • TypeScript и автозаполнение
      При правильной конфигурации вы получите типизированные идентификаторы для переводов, что делает рабочие процессы разработчиков более безопасными и интуитивно понятными.

    • Интеграция с React Native
      Легко установить и связать в среде React Native; также можно обрабатывать специфичные для платформы переводы, если необходимо.

    Соображения

    • Начальная настройка CLI
      Потребуются дополнительные шаги для настройки рабочего процесса извлечения и компиляции для проектов React Native.

    • Сообщество и плагины
      Экосистема библиотеки меньше, чем у i18next, но она быстро растет, и основные инструменты CLI надежны.

    • Организация кода
      Важно решить, как разбивать ваши каталоги сообщений (по экрану, функции или языку), чтобы поддерживать ясность в более крупных приложениях.


    Заключительные мысли

    При выборе решения i18n для вашего приложения React Native:

    1. Оцените ваши требования

      • Сколько языков необходимо сейчас и в будущем?
      • Требуется ли вам загрузка по мере необходимости для крупных приложений?
    2. Учитывайте различия платформ

      • Убедитесь, что любая библиотека поддерживает особенности локалей iOS и Android, особенно касающиеся дат/чисел/валют.
      • Учитывайте оффлайн использование — некоторые переводы могут потребоваться встроить в приложение, в то время как другие могут загружаться удаленно.
    3. Выберите структуру для масштабируемости

      • Если вы планируете крупное или долгоживущие приложение, мощный рабочий процесс извлечения или типизированные ключи могут помочь поддерживать хорошую организацию переводов.
    4. Производительность и размер пакета

      • Ограничения мобильных данных означают, что необходимо внимательно следить за размером ваших файлов перевода и любыми полифилами.
    5. Опыт разработчика (DX)

      • Ищите библиотеки, которые соответствуют навыкам вашей команды — некоторые решения более многословны, но понятны, в то время как другие предлагают больше автоматизации за счет сложности настройки.

    Каждое решение — Intlayer, React-i18next, React Intl и LinguiJS — доказало свою эффективность в среде React Native, хотя с несколько различными приоритетами. Оценка дорожной карты вашего проекта, предпочтений разработчиков и потребностей в локализации поможет вам найти идеальное решение для создания поистине глобального приложения React Native.

    Если у вас есть идея по улучшению этой документации, не стесняйтесь внести свой вклад, подав запрос на вытягивание на GitHub.

    Ссылка на блог GitHub