【发布时间】:2018-09-01 15:09:49
【问题描述】:
我按照 Flutter 官方页面(参见 here)中给出的说明使我的应用程序可以在不同的语言中运行。
根据文档,它检索用户的语言环境,这工作正常。
现在让我们假设我的应用程序支持不同的语言(例如 EN、FR、ES、...),并且用户可以选择其中一种语言来使用应用程序(然后选择的语言将不同于在手机的设置中定义),我该如何实现?
如何强制应用程序区域设置并动态“重新加载”所有翻译?
Flutter 页面没有解释这一点,我在文档中也没有看到任何对我有帮助的东西......
这是当前的实现:
class Translations {
Translations(this.locale);
final Locale locale;
static Translations of(BuildContext context){
return Localizations.of<Translations>(context, Translations);
}
static Map<String, Map<String, String>> _localizedValues = {
'en': {
'title': 'Hello',
},
'fr': {
'title': 'Bonjour',
},
'es': {
'title': 'Hola',
}
};
String text(String key){
return _localizedValues[locale.languageCode][key] ?? '** ${key} not found';
}
}
class TranslationsDelegate extends LocalizationsDelegate<Translations> {
const TranslationsDelegate();
@override
bool isSupported(Locale locale) => ['en', 'fr','es'].contains(locale.languageCode);
@override
Future<Translations> load(Locale locale) {
return new SynchronousFuture<Translations>(new Translations(locale));
}
@override
bool shouldReload(TranslationsDelegate old) => false;
}
在 main.dart 中:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: Translations.of(context).text('title'),
theme: new ThemeData(
primarySwatch: Colors.blue,
),
localizationsDelegates: [
const TranslationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''), // English
const Locale('fr', ''), // French
const Locale('fr', ''), // French
],
home: new LandingPage(),
);
}
}
非常感谢您的帮助。
【问题讨论】:
标签: flutter