web-dev-qa-db-ja.com

Webアプリのロケールは常に「en」Flutterです

AndroidおよびiOSからデバイスロケールを正しく取得していますが、ウェブからは取得していません。ui.window.locale.languageCodeパッケージを使用してui.DartとしてWebロケール言語コードを取得しています。 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;
        },
...
3
Vincenzo

昨日、iOSとWebで同じ問題が発生しました。 この答え でiOSの問題を解決しました。 Webアプリケーションの問題は将来修正されると思います(Webは安定したFlutter機能とは見なされません)。

IOSで国際化されたアプリを作成する必要がある場合は、AndroidおよびWebの場合、 このパッケージ を使用できます。

FutureBuilder<Locale>(
  future: DeviceLocale.getCurrentLocale(),
  builder: (context, localeData) {
    if(!localeData.hasData) return Container( color: Colors.white);
    Locale locale = localeData.data;
    return MaterialApp(
      // localizationsDelegates, supportedLocales, ...

      // « _ » is the locale detected by flutter
      // You should use the locale detected by the library instead
      localeResolutionCallback: (_, supportedLocales) {
        for (var supportedLocaleLanguage in supportedLocales) {
          if (supportedLocaleLanguage.languageCode == locale.languageCode) return supportedLocaleLanguage;
        }

        // If device not support with locale to get language code then default get first on from the list
        return supportedLocales.first;
      }
    );
  },
);

「Localizations.localeOf(context)」を呼び出して、MaterialAppウィジェットの子のロケールを取得できます。

このパッケージは現在デスクトップアプリケーションと互換性がないようです。

問題が通知されたかどうかは、Flutter Githubページの「問題」タブで確認しませんでした。たぶん私は今晩それを知らせなければならない。

0
Flpe