Sobes.tech
Middle

Как да добавите локализация към приложение на Flutter?

sobes.tech AI

Отговор от 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:

    В горния widget (обикновено 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', ''), // Английски
        Locale('ru', ''), // Руски
        // ... други поддържани езици
      ],
      // ...
    );
    

Сега приложението автоматично ще избира локализация според настройките на устройството на потребителя, ако тя е налична в supportedLocales. За ръчно промяна на локалата може да използвате Locale и да обновите състоянието на приложението.