首页 > 解决方案 > Web 应用程序的语言环境始终是“en” Flutter

问题描述

我的应用程序可以从 Android 和 iOS 正确获取设备区域设置,但不能从 Web 获取。ui.window.locale.languageCode我使用ui.dart包获得了网络语言环境语言代码。在我的 Mac 中,我将系统语言设置为意大利语,时区设置为意大利,定位服务设置为启用,但是当我在 Chrome 上运行我的应用程序时,它总是返回“en_”。有什么我想做的吗?这是 main() 中的代码:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
//    Locale myLocale = Localizations.localeOf(context);
    return MaterialApp(
        title: '',
        color: Colors.red,
        localizationsDelegates: [
          const AppLocalizationsDelegate(),
          GlobalMaterialLocalizations.delegate,
          GlobalCupertinoLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
        ],
        supportedLocales: [
          const Locale('en', 'US'),
          const Locale('it', 'IT')
//        const Locale('es', 'ES'),
        ],
        localeResolutionCallback:
            (Locale locale, Iterable<Locale> supportedLocales) {
          for (Locale supportedLocale in supportedLocales) {
            if (kIsWeb) {
              Locale webLocale = Locale(ui.window.locale.languageCode, '');
              print('system locale is ${webLocale}');
              return webLocale;
            } else if (supportedLocale.languageCode == locale.languageCode ||
                supportedLocale.countryCode == locale.countryCode) {
              print('device Locale is $locale');
              return supportedLocale;
            }
          }
          return supportedLocales.first;
        },
...

标签: flutterlocaleflutter-web

解决方案


最后,master 分支上的语言环境按预期工作。更新到 Channel master,1.19.0-4.0.pre.73 解决了这个问题。


推荐阅读