发表日期:2018-12 文章编辑:小灯 浏览次数:2625
Flutter 官方鼓励我们在写 Flutter 应用的时候直接从 MaterialApp 开始,原因是 MaterialApp 为我们集成好了很多 Material Design 所必须的控件。
在大多默认的情况下,Material 的组件是英文说明的,因此对应中国的应用来说,要做国际化处理。
Flutter 提供了国际化的处理包,要使用它先要引入。
dependencies: flutter_localizations: sdk: flutter
之后在 MaterialApp 里添加。
import 'package:flutter_localizations/flutter_localizations.dart';new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new HomePage(title: ''), localizationsDelegates: [ // <-- 添加 GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [ // <-- 添加语言包 const Locale('zh', 'CH'), ], )
Dialog 中的文字是变成中文了。
上面是 flutter 配置的语言包,如果你的应用有英文和中文两个版本,那么需要自己配置语言包。
首先,定义一个 DemoLocalizations
类,这个类就是用于创建语言包的。
class DemoLocalizations { final Locale locale; DemoLocalizations(this.locale);static Map<String, Map<String, String>> _localizedValues = { 'en': { 'task title': 'Flutter Demo', 'titlebar title': 'Flutter Demo Home Page', 'click tip': 'You have pushed the button this many times:', 'inc':'Increment', }, 'zh': { 'task title': 'Flutter 示例', 'titlebar title': 'Flutter 示例主页面', 'click tip': '你一共点击了这么多次按钮:', 'inc':'增加', } };get taskTitle { return _localizedValues[locale.languageCode]['task title']; } get titleBarTitle { return _localizedValues[locale.languageCode]['titlebar title']; } get clickTop { return _localizedValues[locale.languageCode]['click tip']; } get inc { return _localizedValues[locale.languageCode]['inc']; } static DemoLocalizations of(BuildContext context) { return Localizations.of(context, DemoLocalizations); } }
定义完 DemoLocalizations 以后,LocalizationsDelegate 里初始化它。LocalizationsDelegate 是一个抽象类,需要去继承它并实现。
class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations>{ const DemoLocalizationsDelegate();@override bool isSupported(Locale locale) { return ['en','zh'].contains(locale.languageCode); }@override Future<DemoLocalizations> load(Locale locale) { return new SynchronousFuture<DemoLocalizations>(new DemoLocalizations(locale)); }@override bool shouldReload(LocalizationsDelegate<DemoLocalizations> old) { return false; }static DemoLocalizationsDelegate delegate = const DemoLocalizationsDelegate(); }
完成后,把 delegate 添加到 MaterialApp localizationsDelegates 里。
new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new HomePage(title: ''), localizationsDelegates: [ // <-- 添加代理 GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DemoLocalizationsDelegate.delegate, ], supportedLocales: [ // <-- 添加语言包 const Locale('zh', 'CH'), ], )
接着使用它:
home: new MyHomePage(title: DemoLocalizations.of(context).titleBarTitle),
是不是很复杂?是的比较复杂,这是官方推荐的做法。其实我们还可以定义一个全局的存储空间,存储这些变量在合适的时间段里使用。
日期:2018-10 浏览次数:7247
日期:2018-12 浏览次数:4320
日期:2018-07 浏览次数:4869
日期:2018-12 浏览次数:4168
日期:2018-09 浏览次数:5491
日期:2018-12 浏览次数:9916
日期:2018-11 浏览次数:4798
日期:2018-07 浏览次数:4574
日期:2018-05 浏览次数:4852
日期:2018-12 浏览次数:4316
日期:2018-10 浏览次数:5133
日期:2018-12 浏览次数:6207
日期:2018-11 浏览次数:4454
日期:2018-08 浏览次数:4587
日期:2018-11 浏览次数:12624
日期:2018-09 浏览次数:5571
日期:2018-12 浏览次数:4825
日期:2018-10 浏览次数:4179
日期:2018-11 浏览次数:4523
日期:2018-12 浏览次数:6058
日期:2018-06 浏览次数:4003
日期:2018-08 浏览次数:5428
日期:2018-10 浏览次数:4453
日期:2018-12 浏览次数:4517
日期:2018-07 浏览次数:4356
日期:2018-12 浏览次数:4495
日期:2018-06 浏览次数:4376
日期:2018-11 浏览次数:4370
日期:2018-12 浏览次数:4243
日期:2018-12 浏览次数:5276
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.