seedkit_locale

Пакет генерации и переключения локализации для SeedKit-приложений.

Интеграция

  • Для генерации локализации добавь конфиг в pubspec.yaml:
seedkit_locale:
  enabled: true
  class_name: L
  main_locale: ru
  arb_dir: assets/l10n
  output_dir: lib/src/core/generated/l10n
  untranslated_messages_file: untranslated_messages.json
  • Перед созданием, IntlCubit хранилище await StorageFactory.to, должно быть инициализировано:
await StorageFactory.to;

BlocProvider(
  create: (_) => IntlCubit(
    IntlRepository(IntlProvider()),
  ),
);
  • В корне приложения оберни MaterialApp в IntlWidget и передай locale:
IntlWidget(
  builder: (_, intlState) => MaterialApp.router(
    locale: intlState.getLocale,
    localizationsDelegates: const [
      L.delegate,

      // <- тут другие SeedKitLocale.deletage из других пакетов

      GlobalMaterialLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate,
      GlobalCupertinoLocalizations.delegate,
    ],
    supportedLocales: L.delegate.supportedLocales,
  ),
);

Использование

  • в pubspec.yaml должна быть секция seedkit_locale.
seedkit_locale:
  enabled: true
  class_name: L
  main_locale: ru
  arb_dir: assets/l10n
  output_dir: lib/src/core/generated/l10n
  untranslated_messages_file: untranslated_messages.json
  • ARB-файлы в директории arb_dir.
{
  "@@locale": "ru",
  "app_name": "Seedkit шаблон",
  "app_version": "Версия {value}",
  "@app_version": {
    "placeholders": {
      "value": {
        "type": "String",
        "example": "1.0.0"
      }
    }
  }
}
  • Команда запуска
dart run seedkit_locale:generate
  • Результат: генератор создаёт класс, имя которого == class_name в секции pubspec.seedkit_locale

  • IntlCubit — cubit текущей локали; подписывается на репозиторий и меняет локаль через changeLocale.

  • IntlState — состояние локали; getLocale возвращает Locale.

  • IntlWidget — корневой виджет-обёртка, который отдаёт IntlState в builder.

  • IntlProvider — provider хранения выбранной локали.

  • IntlRepository — репозиторий текущей локали со stream, сохранением и восстановлением значения.

  • Intl, MessageLookupByLibrary, initializeInternalMessageLookup и связанные API для сгенерированной локализации.

Импорты

import 'package:seedkit_locale/seedkit_locale_cubit.dart';
import 'package:seedkit_locale/seedkit_locale_intl.dart';
import 'package:seedkit_locale/seedkit_locale_provider.dart';
import 'package:seedkit_locale/seedkit_locale_repository.dart';