Flutter 使用 flutter_localizations 和 intl 手动更改语言
Flutter manually change Language with flutter_localizations and intl
我正在创建 PopupMenuButton
以在本地更改应用程序的语言,但我不知道如何加载其他语言。
这是我创建的用于更改语言的小部件,我想将应用程序语言设置为 PopupMenu 项的值。
import 'package:flutter/material.dart';
import '../generated/l10n.dart';
class ChangeLanguage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PopupMenuButton(
offset: const Offset(0, 40),
onSelected: (value) {
//set language to value
print(L.current);
print(Localizations.localeOf(context).toString());
},
itemBuilder: (BuildContext context) => [
PopupMenuItem(
value: "de",
child: Text(
"Deutsch",
style: Theme.of(context).textTheme.bodyText2,
)),
PopupMenuItem(
value: "en",
child: Text(
"English",
style: Theme.of(context).textTheme.bodyText2,
)),
],
);
}
}
我在 main.dart 文件中实现了 flutter_localizations 和 intl,如下所示:
localizationsDelegates: [
L.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: L.delegate.supportedLocales,
支持的语言有en
和de
,是用intl包生成的。
MaterialApp widget接收一个参数locale,它接收一个Locale的实例。
您应该存储(SQL、sharedpreferences、hive、firebase 或任何数据存储服务)客户首选语言的值。例如:如果客户端默认设置了 'en' 语言,您可以向 MaterialApp 提供区域设置: Locale('en', 'US')
在 main.dart 中,您可以获得值并将其存储在变量中
final language=await _getLanguage();//this method returns a String
Locale locale;//late Locale locale if using null safety
if(language=='de'){
setState((){
locale=Locale('de', 'DE');
});
}
else{
setState((){
locale=Locale('en', 'US');//assuming that English is your default language.
})
}
...
return MaterialApp(
...
locale: locale,
);
就是这样。当然,您可以使用您喜欢的状态管理工具来更好地完成这项工作,但这是您需要的实现的核心
我正在创建 PopupMenuButton
以在本地更改应用程序的语言,但我不知道如何加载其他语言。
这是我创建的用于更改语言的小部件,我想将应用程序语言设置为 PopupMenu 项的值。
import 'package:flutter/material.dart';
import '../generated/l10n.dart';
class ChangeLanguage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return PopupMenuButton(
offset: const Offset(0, 40),
onSelected: (value) {
//set language to value
print(L.current);
print(Localizations.localeOf(context).toString());
},
itemBuilder: (BuildContext context) => [
PopupMenuItem(
value: "de",
child: Text(
"Deutsch",
style: Theme.of(context).textTheme.bodyText2,
)),
PopupMenuItem(
value: "en",
child: Text(
"English",
style: Theme.of(context).textTheme.bodyText2,
)),
],
);
}
}
我在 main.dart 文件中实现了 flutter_localizations 和 intl,如下所示:
localizationsDelegates: [
L.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: L.delegate.supportedLocales,
支持的语言有en
和de
,是用intl包生成的。
MaterialApp widget接收一个参数locale,它接收一个Locale的实例。 您应该存储(SQL、sharedpreferences、hive、firebase 或任何数据存储服务)客户首选语言的值。例如:如果客户端默认设置了 'en' 语言,您可以向 MaterialApp 提供区域设置: Locale('en', 'US')
在 main.dart 中,您可以获得值并将其存储在变量中
final language=await _getLanguage();//this method returns a String
Locale locale;//late Locale locale if using null safety
if(language=='de'){
setState((){
locale=Locale('de', 'DE');
});
}
else{
setState((){
locale=Locale('en', 'US');//assuming that English is your default language.
})
}
...
return MaterialApp(
...
locale: locale,
);
就是这样。当然,您可以使用您喜欢的状态管理工具来更好地完成这项工作,但这是您需要的实现的核心