多國語言(i18n)
使用官方的 flutter_localization
實作,預設使用英文(en)
- 繁體中文(zh-TW)
- 英文(en)
warning
請勿使用 apLocalizationsDelegate,在 v0.21.0 以前版本會使用 apLocalizationsDelegate,整合 multiple_localization 避免無法使用多重本地化初始化
設定
在 MaterialApp 加入多國語言支援
app.dart
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
apLocalizationsDelegate
],
supportedLocales: [
const Locale('en'), // English
const Locale('zh', 'TW'), // Traditional Chinese
],
);
}
自訂使用的語言(可選)
Localization 所使用的語言第一次會根據 localeResolutionCallback 回傳值的設定,預設讀取系統語言
可加入 Callback 修改預設語言,可參考以下範例
並透過 Preferences 載入上一次的設定,其參數為 Locale 中的 languageCode,若為 ApSupportLanguageConstants.system 則使用系統語言
app.dart
Locale locale;
Widget build(BuildContext context) {
return MaterialApp(
// 若是不支援語言 預設為英文
locale: locale,
localeResolutionCallback:
(Locale locale, Iterable<Locale> supportedLocales) {
String languageCode = Preferences.getString(
ApConstants.prefLanguageCode,
ApSupportLanguageConstants.system,
);
if (languageCode == ApSupportLanguageConstants.system)
return this.locale = apLocalizationsDelegate.isSupported(locale)
? locale
: Locale('en');
else
return Locale(
languageCode,
languageCode == ApSupportLanguageConstants.ZH ? 'TW' : null,
);
},
);
}
動態載入語言(可選)
若希望動態載入不同語言時可將 MaterailApp 包裝至 StatusfulWidget 中
並透過 load 載入新的設定
app.dart
void loadLocale(Locale locale) {
setState(() {
this.locale = locale;
apLocalizationsDelegate.load(locale);
});
}