Найти тему

Flutter Локализация приложения с помощью пакета easy_localization

В этой статье я расскажу как добавить локализацию в Ваше Flutter приложение. Для примера будут русский и английский языки. И переводить будем стандартное демонстрационное приложение. Погнали!

Добавляем пакет easy_localization в pabspec.yaml и прописываем assets - папка где будут лежать наши переводы:

-2

Создаем в каталоге assets/translations/ файлы с нашими будущими переводами en‑US.json и ru.json:

-3

Инициализируем EasyLocalization внутри main() - делаем его async, оборачиваем MyApp виджетом EasyLocalization, прописываем path к нашему каталогу с переводами, ставим supportedLocales = Locale('en','US') и Locale('ru'). Обратите внимание, что название файлов должно совпадать с локалью, если мы пишем countryCode то нужно добавлять его в название через дефис en-US.json, а в ru мы не указали countryCode по этому называется просто ru.json. Также устанавливаем какую локаль использовать если не совпало с устройством - в параметр fallbackLocale ставим английскую локаль:

-4

Теперь пакет прописался в context и мы можем установить локаль в наш MaterialApp - задаем localizationsDelegates, supportedLocales и текущую locale:

-5

Для ios нужно прописать в ios/Runner/Info.plist какие локали мы поддерживаем в самый конец dict:

-6

Теперь заполняем наши языковые файлы. Записываем все строки в assets/translations/en-US.json:

-7

А в файл assets/translations/ru.json пишем перевод этих строк:

-8

Теперь в самом приложении у тех строк которые надо переводить дописываем .tr() в конец:

-9
-10
-11

Обратите внимание, что строки написаны в точности как ключи в наших файлах переводов.

Пересобираем приложение и теперь перевод загружается из текущей локали:

-12

За сим всё. Успешных проектов!

P.S. Еще пару мелочей:

1. Узнаем какие у нас в системе есть локали с помощью WidgetsBinding.instance.window.locales:

-13

2. Отключаем логгирование в EasyLocalization, чтобы в консоль не писало ничего EasyLocalization.logger.enableBuildModes = []:

-14