Flutter越來(lái)越強(qiáng)了,但是很多基礎(chǔ)的東西自己還不會(huì)根暑,所以決定把這些部分都寫(xiě)在文章里面力试,幫助萌新早日脫離苦境!排嫌!加油畸裳!
實(shí)現(xiàn)國(guó)際的辦法千萬(wàn)種,但是有兩個(gè)辦法是真想淳地,而且實(shí)現(xiàn)得很方便:1怖糊,通過(guò)Flutter Intl插件實(shí)現(xiàn)帅容,2、通過(guò)GetX插件實(shí)現(xiàn)
1伍伤、通過(guò)Flutter Intl插件實(shí)現(xiàn):
在Plugins里面找到Flutter Intl這個(gè)插件并徘,然后安裝-重啟
安裝完成之后,按照下圖的方法操作:
然后在你的pubspec.yaml看到
flutter_intl:
enabled: true
還有下面這些
那配置就成功了H呕辍麦乞!
如果想增加其他語(yǔ)言的話,就可以通過(guò)下面的操作實(shí)現(xiàn):
舉例子:
如果想增加中文劝评,直接在對(duì)話框里面輸入zh姐直,插件就會(huì)自動(dòng)生成對(duì)應(yīng)的文件:
然后在intl_en.arb和 intl_zh.arb文件中寫(xiě)入對(duì)應(yīng)的翻譯:
在app內(nèi)的使用如下:
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
localizationsDelegates: const [
S.delegate,
//GlobalMaterialLocalizations.delegate 為Material Components庫(kù)提供了本地化的字符串和其他值
GlobalMaterialLocalizations.delegate,
//GlobalWidgetsLocalizations.delegate定義widget默認(rèn)的文本方向,從左到右或從右到左蒋畜。
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate
],
supportedLocales:
S.delegate.supportedLocales,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
如果需要更新請(qǐng)使用 S.load(const Locale('zh','CN'));
但是這樣刷新的話声畏,就需要刷新才會(huì)生效,全局刷新的話姻成,也很麻煩插龄,所以推薦下面GetX框架實(shí)現(xiàn)
2、通過(guò)GetX插件實(shí)現(xiàn)
通過(guò)GetX插件實(shí)現(xiàn)會(huì)更方便點(diǎn):
先引入框架
#使用getX框架
get: 4.1.4
然后在mian.drat里面引用import 'package:get/get.dart';
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Flutter Demo',
//設(shè)置過(guò)渡動(dòng)畫(huà)
defaultTransition: Transition.fade,
//設(shè)置默認(rèn)語(yǔ)言
locale: Locale('zh', 'CN'),
// 在配置錯(cuò)誤的情況下,使用的語(yǔ)言
fallbackLocale: Locale('en', 'EN'),
//這個(gè)是翻譯的關(guān)鍵科展,根據(jù)translationsKeys來(lái)進(jìn)行自定義的內(nèi)容進(jìn)行翻譯
translationsKeys: AppTranslation.translation,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: HomePage(),
);
}
translationsKeys的設(shè)置:
abstract class AppTranslation{
static Map<String,Map<String,String>> translation={
'en_EN':Locales.en_EN,
'zh_CN':Locales.zh_CN,
'fr_CA': Locales.zh_CN,
};
}
abstract class LocaleKeys{
static const change_zh='change_zh_CN';
static const change_en='change_en_EN';
static const home='home';
static const searchFor='search_For';
static const travel_shot='Travel_shot';
static const mySelf='myself';
}
abstract class Locales{
static const en_EN={
LocaleKeys.change_zh:'change Chinese',
LocaleKeys.change_en:'change English',
LocaleKeys.home:'Home',
LocaleKeys.searchFor:'Search for',
LocaleKeys.travel_shot:'Travel shot',
LocaleKeys.mySelf:'myself',
};
static const zh_CN={
LocaleKeys.change_zh:'切換中文',
LocaleKeys.change_en:'切換英文',
LocaleKeys.home:'首頁(yè)',
LocaleKeys.searchFor:'搜索',
LocaleKeys.travel_shot:'旅拍',
LocaleKeys.mySelf:'我的',
};
static const fr_CA={};
}
然后語(yǔ)言的切換方法:
var locale = Locale('en', 'EN');
Get.updateLocale(locale);
這樣對(duì)應(yīng)全局引用到Locales類(lèi)里面的參數(shù)就會(huì)進(jìn)行翻譯了1枥恰!是不是更方便辛润?膨处?
好了,國(guó)際化先到這里砂竖,下面繼續(xù)更新別的新文章了真椿,愛(ài)你們呦!乎澄!