在《Flutter组件国际化(三):Localizations详解》文章中已经介绍了Localizations的使用方法。然而大多数应用程序都是通过MaterialApp或者CupertinoApp为入口,而它们都是WidgetsApp的一个包装。所以一般情况我们不需要直接使用Localizations,因为在WidgetsApp中已经包含了一个Localizations组件。
// WidgetsApp部分源码
class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver {
...
@override
Widget build(BuildContext context) {
...
return Shortcuts(
shortcuts: _keyMap,
child: Actions(
actions: _actionMap,
child: DefaultFocusTraversal(
policy: ReadingOrderTraversalPolicy(),
child: _MediaQueryFromWindow(
// 包含了一个Localizations组件
child: Localizations(
locale: appLocale,
delegates: _localizationsDelegates.toList(),
child: title,
),
),
),
),
);
}
}
Localizations需要的参数locale和delegates已经被提升到了上层组件WidgetsApp、MaterialApp或者CupertinoApp中去了。
默认情况下,Flutter SDK中的组件不管是Material组件还是Cupertino组件仅支持英语。要为这些组件添加多语言的支持,需要添加“flutter_localizations”依赖包。依赖包中包含:
- GlobalWidgetsLocalizations.delegate代理,提供了组件文本方向的国际化支持。
- GlobalMaterialLocalizations.delegate代理,提供了Material组件的国际化支持。
- GlobalCupertinoLocalizations.delegate代理,提供了Cupertino组件的国际化支持。
使用“flutter_localizations”依赖包需要一些配置:
//添加依赖到pubspec.yaml文件中:
...
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
把“flutter_localizations”依赖包中定义的代理加入到localizationsDelegates中去。localizationsDelegates中的各个代理互不干扰,各自加载自己的国际化资源,返回自己的国际化资源实例,提供给相关组件使用。
MaterialApp(
locale: const Locale.fromSubtags(languageCode: 'zh'),
在《Flutter组件国际化(三):Localizations详解》文章中已经介绍了Localizations的使用方法。然而大多数应用程序都是通过MaterialApp或者CupertinoApp为入口,而它们都是WidgetsApp的一个包装。所以一般情况我们不需要直接使用Localizations,因为在WidgetsApp中已经包含了一个Localizations组件。
// WidgetsApp部分源码
class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver {
...
@override
Widget build(BuildContext context) {
...
return Shortcuts(
shortcuts: _keyMap,
child: Actions(
actions: _actionMap,
child: DefaultFocusTraversal(
policy: ReadingOrderTraversalPolicy(),
child: _MediaQueryFromWindow(
// 包含了一个Localizations组件
child: Localizations(
locale: appLocale,
delegates: _localizationsDelegates.toList(),
child: title,
),
),
),
),
);
}
}
Localizations需要的参数locale和delegates已经被提升到了上层组件WidgetsApp、MaterialApp或者CupertinoApp中去了。
默认情况下,Flutter SDK中的组件不管是Material组件还是Cupertino组件仅支持英语。要为这些组件添加多语言的支持,需要添加“flutter_localizations”依赖包。依赖包中包含:
- GlobalWidgetsLocalizations.delegate代理,提供了组件文本方向的国际化支持。
- GlobalMaterialLocalizations.delegate代理,提供了Material组件的国际化支持。
- GlobalCupertinoLocalizations.delegate代理,提供了Cupertino组件的国际化支持。
使用“flutter_localizations”依赖包需要一些配置:
//添加依赖到pubspec.yaml文件中:
...
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
把“flutter_localizations”依赖包中定义的代理加入到localizationsDelegates中去。localizationsDelegates中的各个代理互不干扰,各自加载自己的国际化资源,返回自己的国际化资源实例,提供给相关组件使用。
MaterialApp(
locale: const Locale.fromSubtags(languageCode: 'zh'),
在《Flutter组件国际化(三):Localizations详解》文章中已经介绍了Localizations的使用方法。然而大多数应用程序都是通过MaterialApp或者CupertinoApp为入口,而它们都是WidgetsApp的一个包装。所以一般情况我们不需要直接使用Localizations,因为在WidgetsApp中已经包含了一个Localizations组件。
// WidgetsApp部分源码
class _WidgetsAppState extends State<WidgetsApp> with WidgetsBindingObserver {
...
@override
Widget build(BuildContext context) {
...
return Shortcuts(
shortcuts: _keyMap,
child: Actions(
actions: _actionMap,
child: DefaultFocusTraversal(
policy: ReadingOrderTraversalPolicy(),
child: _MediaQueryFromWindow(
// 包含了一个Localizations组件
child: Localizations(
locale: appLocale,
delegates: _localizationsDelegates.toList(),
child: title,
),
),
),
),
);
}
}
Localizations需要的参数locale和delegates已经被提升到了上层组件WidgetsApp、MaterialApp或者CupertinoApp中去了。
默认情况下,Flutter SDK中的组件不管是Material组件还是Cupertino组件仅支持英语。要为这些组件添加多语言的支持,需要添加“flutter_localizations”依赖包。依赖包中包含:
- GlobalWidgetsLocalizations.delegate代理,提供了组件文本方向的国际化支持。
- GlobalMaterialLocalizations.delegate代理,提供了Material组件的国际化支持。
- GlobalCupertinoLocalizations.delegate代理,提供了Cupertino组件的国际化支持。
使用“flutter_localizations”依赖包需要一些配置:
//添加依赖到pubspec.yaml文件中:
...
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
把“flutter_localizations”依赖包中定义的代理加入到localizationsDelegates中去。localizationsDelegates中的各个代理互不干扰,各自加载自己的国际化资源,返回自己的国际化资源实例,提供给相关组件使用。
MaterialApp(
locale: const Locale.fromSubtags(languageCode: 'zh'),