В этой статье я расскажу как добавить локализацию в Ваше Flutter приложение. Для примера будут русский и английский языки. И переводить будем стандартное демонстрационное приложение. Погнали!
Добавляем пакет easy_localization в pabspec.yaml и прописываем assets - папка где будут лежать наши переводы:
Создаем в каталоге assets/translations/ файлы с нашими будущими переводами en‑US.json и ru.json:
Инициализируем EasyLocalization внутри main() - делаем его async, оборачиваем MyApp виджетом EasyLocalization, прописываем path к нашему каталогу с переводами, ставим supportedLocales = Locale('en','US') и Locale('ru'). Обратите внимание, что название файлов должно совпадать с локалью, если мы пишем countryCode то нужно добавлять его в название через дефис en-US.json, а в ru мы не указали countryCode по этому называется просто ru.json. Также устанавливаем какую локаль использовать если не совпало с устройством - в параметр fallbackLocale ставим английскую локаль:
Теперь пакет прописался в context и мы можем установить локаль в наш MaterialApp - задаем localizationsDelegates, supportedLocales и текущую locale:
Для ios нужно прописать в ios/Runner/Info.plist какие локали мы поддерживаем в самый конец dict:
Теперь заполняем наши языковые файлы. Записываем все строки в assets/translations/en-US.json:
А в файл assets/translations/ru.json пишем перевод этих строк:
Теперь в самом приложении у тех строк которые надо переводить дописываем .tr() в конец:
Обратите внимание, что строки написаны в точности как ключи в наших файлах переводов.
Пересобираем приложение и теперь перевод загружается из текущей локали:
За сим всё. Успешных проектов!
P.S. Еще пару мелочей:
1. Узнаем какие у нас в системе есть локали с помощью WidgetsBinding.instance.window.locales:
2. Отключаем логгирование в EasyLocalization, чтобы в консоль не писало ничего EasyLocalization.logger.enableBuildModes = []: