Подробные шаги и возможные подводные камни
В 2020 году, когда Китай и США являются крупнейшими рынками смартфонов, поддержка i18n стала жизненно важной для разработчиков мобильных приложений.
Я обнаружил, что в большинстве руководств по Flutter i18n отсутствуют пояснения и подробные инструкции, что затрудняет их выполнение.
После нескольких дней попыток интегрировать поддержку i18n в мое приложение Flutter, я решил написать пошаговое руководство, которое пытается прояснить все дизайнерские решения.
Зависимости
- flutter_localizations — это фреймворк Flutter для поддержки i18n, который дает нам API для подачи в нашу реализацию i18n.
- intl — это платформа для написания интерфейсов абстракции i18n.
- intl_translation — это интерфейс командной строки для разделения данных кода i18n, который генерирует код из файлов данных и извлекает файлы данных из кода.
Задача
Цели i18n:
- Отделяйте сообщения от пользовательского интерфейса, чтобы интерфейсным разработчикам не приходилось трогать связанный с i18n код.
- Отделите данные от кода, чтобы переводчикам не приходилось трогать код.
Состав
Для достижения цели нам понадобятся:
- dart интерфейс для абстрагирования i18n от другого кода пользовательского интерфейса.
- Файлы данных, JSON как arb файлы, для переводов.
- Реализации для каждой локализации.
- Конвертер для преобразования файлов данных в реализации локализации.
Построим i18n шаг за шагом
Взгляд на конечный результат:
Я позаимствовал код из 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!
Источник: