【发布时间】:2019-03-22 23:35:51
【问题描述】:
按下按钮时我需要以编程方式更改应用程序区域设置
我的代码:
MaterialApp(
localizationsDelegates: [
_newLocaleDelegate,
const AppTranslationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('ar', ''),
],
locale: mylocale,
title: appTitle,
home: Scaffold(
body: new MyCustomForm(),
),
debugShowCheckedModeBanner: false
);
new MaterialButton(
onPressed: () {
setState(() {
mylocale=Locale("ar","");
_newLocaleDelegate = AppTranslationsDelegate(newLocale:mylocale);
});
},
),
翻译代码:
AppTranslations.of(context).text("text")
AppTranslations 类:
class AppTranslations {
Locale locale;
static Map<dynamic, dynamic> _localisedValues;
AppTranslations(Locale locale) {
this.locale = locale;
_localisedValues = null;
}
static AppTranslations of(BuildContext context) {
return Localizations.of<AppTranslations>(context, AppTranslations);
}
static Future<AppTranslations> load(Locale locale) async {
AppTranslations appTranslations = AppTranslations(locale);
String jsonContent =
await rootBundle.loadString("assets/locale/localization_${locale.languageCode}.json");
_localisedValues = json.decode(jsonContent);
return appTranslations;
}
get currentLanguage => locale.languageCode;
String text(String key) {
print(key);
if(_localisedValues!=null)
return _localisedValues[key] ?? "$key";
else
return key;
}
}
我的问题:
当语言环境改变页面方向改变而没有翻译时, 要获得效果翻译需要刷新页面或转到另一个页面并返回,
任何帮助
【问题讨论】:
-
你需要将你的materialApp包装到另一个小部件中,通过请求一个新的密钥来重新启动应用程序,这个简单的插件localize_and_translate已经准备好了这个名为
LocalizedApp()的类,值得一试