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;
},
...
昨日、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ページの「問題」タブで確認しませんでした。たぶん私は今晩それを知らせなければならない。