Интернационализация Flutter (i18n) 101

Подробные шаги и возможные подводные камни

В 2020 году, когда Китай и США являются крупнейшими рынками смартфонов, поддержка i18n стала жизненно важной для разработчиков мобильных приложений.

Я обнаружил, что в большинстве руководств по Flutter i18n отсутствуют пояснения и подробные инструкции, что затрудняет их выполнение.

После нескольких дней попыток интегрировать поддержку i18n в мое приложение Flutter, я решил написать пошаговое руководство, которое пытается прояснить все дизайнерские решения.

Зависимости

  • flutter_localizations — это фреймворк Flutter для поддержки i18n, который дает нам API для подачи в нашу реализацию i18n.
  • intl — это платформа для написания интерфейсов абстракции i18n.
  • intl_translation — это интерфейс командной строки для разделения данных кода i18n, который генерирует код из файлов данных и извлекает файлы данных из кода.

Задача

Цели i18n:

  • Отделяйте сообщения от пользовательского интерфейса, чтобы интерфейсным разработчикам не приходилось трогать связанный с i18n код.
  • Отделите данные от кода, чтобы переводчикам не приходилось трогать код.

Состав

Для достижения цели нам понадобятся:

  • dart интерфейс для абстрагирования i18n от другого кода пользовательского интерфейса.
  • Файлы данных, JSON как arb файлы, для переводов.
  • Реализации для каждой локализации.
  • Конвертер для преобразования файлов данных в реализации локализации.

Построим i18n шаг за шагом

Взгляд на конечный результат:

См. также:  Растровые индексы в Go: невероятная скорость поиска

Я позаимствовал код из Mini Donkey, приложения, которое использует зашифрованную стеганографию для защиты конфиденциальности в социальных сетях. Если вас интересует исходный код, проверьте:

 

tianhaoz95 / photochat
Mini Donkey надежно и тайно передает личные сообщения с помощью шифрования (AES) и стеганографии (техника… github.com

 

Шаг 1. Установите зависимости

Сначала нам нужно установить три пакета с:

После этого сделайте flutter pub get, если ваша среда IDE не делает этого за вас.

Шаг 2. Напишите заглушку интерфейса

Вот интерфейс-заглушка i18n из документации Flutter, которого должно хватить для 90% случаев использования:

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

Не беспокойтесь, шаг 6 генерирует недостающий метод из файлов данных.

Шаг 3. Создайте файлы данных из интерфейса заглушки.

intl_translation собирает intl сообщения из интерфейса и генерирует соответствующие файлы данных:

Шаг 4. Переведите файлы сгенерированных данных.

Каждый файл данных представляет локаль. Мы можем добавить новую локаль, добавив новый файл данных:

Шаг 5. Создание реализаций интерфейса из файлов данных

После перевода файла данных мы можем сгенерировать код с помощью:

Шаг 6. Улучшение интерфейса

Теперь, когда реализации интерфейса имеют расширенные языковые стандарты, нам нужно добавить методы к интерфейсу в i18n.dart, чтобы использовать их:

Обратите внимание, что имя метода должно совпадать с идентификатором сообщения, которым в данном случае является «заголовок».

Шаг 7. Внедрите интерфейс и реализации в приложение «Материал».

Приложение материалов, которое используют почти все приложения Flutter, предоставляет нам удобный интерфейс для внедрения нашего интерфейса i18n:

Шаг 8. Используйте локализованные сообщения в приложении Material.

Вот пример того, как использовать локализованные сообщения в приложениях:

Ура! Удачного взлома с i18n!

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: