Назад к вопросам
Middle
250
questionbank

Как добавить локализацию в приложение на Flutter?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Добавление зависимостей:

    В файле pubspec.yaml нужно добавить зависимости для локализации:

    dependencies:
      flutter:
        sdk: flutter
    
      flutter_localizations:
        sdk: flutter
      intl: ^0.18.0 # Пример версии, может отличаться
    

    Затем выполнить flutter pub get.

  2. Создание файлов локализации:

    Создать каталоги для ресурсов локализации, например ./lib/l10n/. Внутри создать .arb файлы для каждого поддерживаемого языка. Например, для английского и русского:

    app_en.arb:

    {
      "helloWorld": "Hello World!",
      "@@locale": "en"
    }
    

    app_ru.arb:

    {
      "helloWorld": "Привет мир!",
      "@@locale": "ru"
    }
    
  3. Настройка генерации кода:

    В файле pubspec.yaml нужно указать путь к файлами локализации и настроить .arb генерацию:

    flutter:
      generate: true # Включить генерацию
    
      assets:
        - assets/... # Ваши другие ассеты
    
      l10n:
        arb-dir: lib/l10n # Каталог с .arb файлами
        template-arb-file: app_en.arb # Шаблонный .arb файл
        output-localization-file: app_localizations.dart # Имя генерируемого файла
    

    После сохранения pubspec.yaml, Flutter автоматически сгенерирует файл ./lib/generated/l10n.dart (или указанное в output-localization-file).

  4. Использование локализованных строк:

    В приложении, где нужно использовать локализованные строки, импортировать сгенерированный файл:

    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    

    Затем обратиться к локализованной строке через AppLocalizations.of(context)!:

    Text(AppLocalizations.of(context)!.helloWorld),
    
  5. Настройка MaterialApp или CupertinoApp:

    В виджете верхнего уровня (обычно MaterialApp или CupertinoApp) нужно указать поддержку языков и делегаты локализации:

    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    
    MaterialApp(
      // ... другие настройки
      localizationsDelegates: const [
        AppLocalizations.delegate, // Делегат из сгенерированного файла
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en', ''), // English
        Locale('ru', ''), // Russian
        // ... другие поддерживаемые языки
      ],
      // ...
    );
    

Теперь приложение будет автоматически выбирать локализацию в зависимости от настроек устройства пользователя, если она присутствует в supportedLocales. Для изменения локали вручную можно использовать Locale и обновлять состояние приложения.