• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

    Flutter 國際化

    發表日期:2018-12 文章編輯:小燈 瀏覽次數:2883

    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), 

    是不是很復雜?是的比較復雜,這是官方推薦的做法。其實我們還可以定義一個全局的存儲空間,存儲這些變量在合適的時間段里使用。


    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/17559.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    田中瞳中文字幕久久精品| 夜夜精品视频一区二区| 精品一区二区无码AV| 国产精品乳摇在线播放| 国产成人无码精品久久久性色| 亚洲精品色播一区二区| 亚洲国产综合91精品麻豆| 亚洲精品网站在线观看不卡无广告| 国产精品福利一区二区久久| 国产亚洲精品影视在线产品| 国产精品国产三级国产在线观看 | 国产乱子精品免费视观看片| 亚洲精品自在在线观看| 国产精品亚洲色婷婷99久久精品| 97福利视频精品第一导航| 宅男在线国产精品无码| 国产精品久久免费视频| 亚洲国产精品美女久久久久| 少妇人妻偷人精品视频| 日韩精品在线观看| 亚洲精品在线视频| 国产精品亚洲精品日韩动图| 999在线视频精品免费播放观看 | 久久91这里精品国产2020| 国产麻豆精品在线观看| 国产精品久久久久影院嫩草| 嫩草伊人久久精品少妇AV| 熟女人妻少妇精品视频| 国产国拍亚洲精品福利| 国产精品四虎在线观看免费| 亚洲色精品VR一区区三区 | 亚洲精品美女久久777777| 亚洲精品无码久久久久AV麻豆| 国产精品无码无卡在线观看久 | 视频精品一区二区三区| 大伊香蕉在线精品视频人碰人| 国产精品福利在线播放| 亚欧在线精品免费观看一区| 人妻少妇精品视中文字幕国语 | 久久国产精品自由自在| 国产香蕉精品视频在|