Что такое интернационализация?
Интернационализация (часто сокращается до i18n) — это процесс разработки вашего приложения таким образом, чтобы оно поддерживало несколько языков/локалей и позволяло легко локализовать его.
Например, приложения Flutter, использующие жестко закодированные строки, считаются не готовыми для международной аудитории, и это вызовет настоящую борьбу, когда приложение должно быть представлено на других языках.
Правильный подход — использовать ссылочный ключ в словаре перевода вместо жестко закодированных строк. В следующий раз, когда приложение отображает какой-либо текст, оно ищет ключ в словаре для выбранного пользовательского языка и соответствующим образом извлекает содержимое. Иллюстрация ниже объясняет это очень хорошо.
Помимо текста, в процессе интернационализации также следует учитывать форматирование дат и чисел (денежные суммы, номера телефонов и т. д.), макеты и т. д.
Вкратце, интернационализация означает разработку вашего продукта таким образом, чтобы его можно было легко масштабировать и требовалось минимальное изменение кода при появлении любого нового языка/локали.
Внедрение интернационализации с помощью GetX
Давайте углубимся в код и научимся реализовывать интернационализацию во флаттере:
- Начните с добавления get в качестве зависимости в файл
pubspec.yaml
. Проверьте последнюю версию соответственно из паба.
- Затем убедитесь, что вашим виджетом самого высокого уровня является GetMaterialApp, а не MaterialApp.
- GetMaterialApp может принимать
translations
типа класса Переводы.
- Теперь давайте реализуем класс
AppTranslations
, который нужно расширить изTranslations
.
Translations
— это абстрактный класс, полученный из зависимости get
, и вы должны включить реализацию метода keys, который возвращает карту карт нескольких языков. Так:
Выше вы можете видеть en_US
, ur_PK
, они называются Locales
и происходят от material.dart
.
Языковой стандарт имеет два аргумента: languageCode и countryCode.
Список всех локалей можно посмотреть здесь.
- Теперь вместо использования жестко запрограммированных строк в текстовых виджетах используйте ссылочный ключ, который вы добавили на карту, в моем случае, например так:
Практически то, что вы видели на иллюстрации выше. Правильно ⁉️
- Последнее, что вы должны знать, это смена локалей. Вы можете передать исходную локаль своему GetMaterialApp следующим образом. Таким образом, изначально ваше приложение будет отображаться в английской локали.
Пока что вывод выглядит так.
Теперь предположим, что я хочу обновить локаль на урду, как только будет нажата плавающая кнопка действия. Вот как вы это делаете:
Get.updateLocale
отвечает за обновление локали, а локаль, указанная в качестве аргумента, затем будет найдена в классе AppTranslations для соответствующих ключей.
Волшебство происходит одним нажатием кнопки:
Изменилась не только текстовая строка, вы также могли заметить, что макет LTR изменился на RTL. Что ж, в этом прелесть интернационализации Getx.
Урду, арабский, фарси, иврит и пушту будут иметь макет с письмом справа налево, как только локаль будет обновлена для этих языков. Класс интернационализации GetX поддерживает это, вам не нужно ничего делать для этого!
Не стесняйтесь узнать больше об интернационализации GetX из официальной документации, дайте мне знать, если я что-то пропустил!
Ссылка на официальную документацию
Спасибо за прочтение, хлопните в ладоши или угостите меня кофе!