Flutter intl с использованием Flavors

Интернационализация приложений Flutter с использованием flavors включает в себя управление несколькими конфигурациями вашего приложения (flavors) и предоставление различного локализованного контента (например, текста, изображений и форматирования) для различных языков или регионов. Вот пошаговое руководство, как это сделать:
Настройка flavors для вашего Flutter приложения
Flavors в Flutter позволяют создавать несколько версий вашего приложения, например, staging, production или для разных локалей. Вы можете определить flavors в директориях android
и ios
.
Для Android:
- Откройте файл
android/app/build.gradle
. - Добавьте конфигурации flavors в секцию
android
:android { ... flavorDimensions "version" productFlavors { english { dimension "version" applicationIdSuffix ".english" versionNameSuffix "-english" } spanish { dimension "version" applicationIdSuffix ".spanish" versionNameSuffix "-spanish" } } }
Для iOS:
- Откройте файл
ios/Runner.xcodeproj
в Xcode. - В Xcode создайте новые схемы для каждого flavor (в данном примере для английского и испанского языков) путем дублирования текущей схемы.
- В разделе
Build Settings
создайте новую конфигурациюBuild Configuration
для каждого flavor.
Настройка локализации (i18n) для вашего Flutter приложения
Для интернационализации приложения Flutter используйте пакет flutter_localizations
вместе с intl
.
-
Добавьте зависимости в файл
pubspec.yaml
:dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.17.0
-
Добавьте ARB файлы для каждого языка в директорию
lib/l10n
:
Пример содержимого файлаapp_en.arb
:{ "title": "Hello World", "message": "Welcome to the Flutter App!" }
Пример содержимого файла
app_es.arb
:{ "title": "Hola Mundo", "message": "¡Bienvenido a la aplicación Flutter!" }
- Сгенерируйте классы локализации, запустив команду:
flutter pub run intl_utils:generate
- Обновите ваш
MaterialApp
, чтобы поддерживать локализацию:import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart'; class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, // Ваши сгенерированные делегаты локализации ], supportedLocales: [ const Locale('en', ''), // Английский const Locale('es', ''), // Испанский ], localeResolutionCallback: (locale, supportedLocales) { if (locale == null) return supportedLocales.first; for (var supportedLocale in supportedLocales) { if (supportedLocale.languageCode == locale.languageCode) { return supportedLocale; } } return supportedLocales.first; }, home: MyHomePage(), ); } }
Использование flavors для загрузки определённых локалей
Вы можете использовать flavors для установки локали по умолчанию для вашего приложения в зависимости от того, какой flavor используется. Например, в вашем файле main.dart
создайте отдельные точки входа для каждого flavor:
-
Создайте отдельные файлы
main_english.dart
иmain_spanish.dart
. -
Установите локаль по умолчанию в каждом из этих файлов:
void main() { runApp(MyApp(defaultLocale: Locale('en'))); }
И для испанского flavor:
void main() { runApp(MyApp(defaultLocale: Locale('es'))); }
- Измените
localeResolutionCallback
, чтобы использовать переданнуюdefaultLocale
:class MyApp extends StatelessWidget { final Locale defaultLocale; MyApp({required this.defaultLocale}); @override Widget build(BuildContext context) { return MaterialApp( locale: defaultLocale, ... ); } }
Сборка и запуск разных flavors
Для сборки различных flavors используйте флаг --flavor
:
-
Для Android (английский flavor):
flutter build apk --flavor english
- Для iOS (испанский flavor):
flutter build ios --flavor spanish
Таким образом, вы можете интернационализировать ваше Flutter приложение, используя flavors, обеспечивая, что каждая версия приложения может иметь свою локаль по умолчанию, одновременно поддерживая несколько языков динамически.