為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數(shù):2630
Flutter 官方鼓勵(lì)我們?cè)趯?Flutter 應(yīng)用的時(shí)候直接從 MaterialApp 開始,原因是 MaterialApp 為我們集成好了很多 Material Design 所必須的控件。
在大多默認(rèn)的情況下,Material 的組件是英文說(shuō)明的,因此對(duì)應(yīng)中國(guó)的應(yīng)用來(lái)說(shuō),要做國(guó)際化處理。
Flutter 提供了國(guó)際化的處理包,要使用它先要引入。
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: [ // <-- 添加語(yǔ)言包 const Locale('zh', 'CH'), ], )
Dialog 中的文字是變成中文了。
上面是 flutter 配置的語(yǔ)言包,如果你的應(yīng)用有英文和中文兩個(gè)版本,那么需要自己配置語(yǔ)言包。
首先,定義一個(gè) DemoLocalizations
類,這個(gè)類就是用于創(chuàng)建語(yǔ)言包的。
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 示例主頁(yè)面', 'click tip': '你一共點(diǎn)擊了這么多次按鈕:', '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 是一個(gè)抽象類,需要去繼承它并實(shí)現(xiàn)。
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: [ // <-- 添加語(yǔ)言包 const Locale('zh', 'CH'), ], )
接著使用它:
home: new MyHomePage(title: DemoLocalizations.of(context).titleBarTitle),
是不是很復(fù)雜?是的比較復(fù)雜,這是官方推薦的做法。其實(shí)我們還可以定義一個(gè)全局的存儲(chǔ)空間,存儲(chǔ)這些變量在合適的時(shí)間段里使用。
日期:2018-10 瀏覽次數(shù):7250
日期:2018-12 瀏覽次數(shù):4324
日期:2018-07 瀏覽次數(shù):4872
日期:2018-12 瀏覽次數(shù):4171
日期:2018-09 瀏覽次數(shù):5499
日期:2018-12 瀏覽次數(shù):9919
日期:2018-11 瀏覽次數(shù):4801
日期:2018-07 瀏覽次數(shù):4576
日期:2018-05 瀏覽次數(shù):4855
日期:2018-12 瀏覽次數(shù):4323
日期:2018-10 瀏覽次數(shù):5136
日期:2018-12 瀏覽次數(shù):6209
日期:2018-11 瀏覽次數(shù):4459
日期:2018-08 瀏覽次數(shù):4589
日期:2018-11 瀏覽次數(shù):12628
日期:2018-09 瀏覽次數(shù):5577
日期:2018-12 瀏覽次數(shù):4828
日期:2018-10 瀏覽次數(shù):4184
日期:2018-11 瀏覽次數(shù):4525
日期:2018-12 瀏覽次數(shù):6061
日期:2018-06 瀏覽次數(shù):4005
日期:2018-08 瀏覽次數(shù):5433
日期:2018-10 瀏覽次數(shù):4456
日期:2018-12 瀏覽次數(shù):4520
日期:2018-07 瀏覽次數(shù):4360
日期:2018-12 瀏覽次數(shù):4498
日期:2018-06 瀏覽次數(shù):4380
日期:2018-11 瀏覽次數(shù):4372
日期:2018-12 瀏覽次數(shù):4248
日期:2018-12 瀏覽次數(shù):5279
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.