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

Интернационализация (часто сокращается до 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 из официальной документации, дайте мне знать, если я что-то пропустил!

Ссылка на официальную документацию

Спасибо за прочтение, хлопните в ладоши или угостите меня кофе!