app_locale_resolution.dart 1.28 KB
import 'package:flutter/widgets.dart';

Locale resolveAppLocale(
    Locale? deviceLocale, Iterable<Locale> supportedLocales) {
  return const Locale('en');

  if (deviceLocale == null) return const Locale('en');

  for (final locale in supportedLocales) {
    if (locale == deviceLocale) {
      return locale;
    }
  }

  if (deviceLocale.languageCode == 'zh') {
    final script = deviceLocale.scriptCode?.toLowerCase();
    final country = deviceLocale.countryCode?.toUpperCase();
    final isHant = script == 'hant' ||
        country == 'TW' ||
        country == 'HK' ||
        country == 'MO';

    return supportedLocales.firstWhere(
      (locale) =>
          locale.languageCode == 'zh' &&
          locale.scriptCode == (isHant ? 'Hant' : 'Hans'),
      orElse: () => Locale.fromSubtags(
        languageCode: 'zh',
        scriptCode: isHant ? 'Hant' : 'Hans',
      ),
    );
  }

  if (deviceLocale.countryCode != null) {
    for (final locale in supportedLocales) {
      if (locale.languageCode == deviceLocale.languageCode &&
          locale.countryCode == deviceLocale.countryCode) {
        return locale;
      }
    }
  }

  for (final locale in supportedLocales) {
    if (locale.languageCode == deviceLocale.languageCode) {
      return locale;
    }
  }

  return const Locale('en');
}