l10n_extensions.dart 1.05 KB
import 'dart:ui' show PlatformDispatcher;

import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

import 'app_locale_resolution.dart';
import 'gen/app_localizations.dart';

export 'app_locale_resolution.dart';
export 'gen/app_localizations.dart';

/// 在 Widget build() 中通过 context 访问:context.l10n.appName
extension AppLocalizationsX on BuildContext {
  AppLocalizations get l10n =>
      AppLocalizations.of(this) ?? currentAppLocalizations();
}

/// 在 Controller / 无 context 场景中全局访问:l10n.appName
AppLocalizations get l10n {
  final context = _safeGetContext();
  final localizations = context != null ? AppLocalizations.of(context) : null;
  return localizations ?? currentAppLocalizations();
}

AppLocalizations currentAppLocalizations() {
  final locale = resolveAppLocale(
    Get.locale ?? PlatformDispatcher.instance.locale,
    AppLocalizations.supportedLocales,
  );
  return lookupAppLocalizations(locale);
}

BuildContext? _safeGetContext() {
  try {
    return Get.context;
  } catch (_) {
    return null;
  }
}