gpt4 book ai didi

无上下文的 flutter 本地化

转载 作者:行者123 更新时间:2023-12-03 13:29:40 29 4
gpt4 key购买 nike

我正在尝试将我的应用程序本地化。我为支持的语言创建了所需的 string.arb 文件。
为什么AppLocalizations.of(context)需要上下文?
我只是想访问文件/语言环境文件/类中的命名字符串。
在应用程序的某个时刻,我构建了一个 List 并稍后通过使用单独的类覆盖某些字段来填充它。
但是,此类没有上下文,但我想在其中使用本地化字符串。
我可以编写一个方法来获取我输入的任何字符串的本地化吗?

最佳答案

如果您不想使用包,那么这里有一个对我有用的解决方案。现在最common implementationAppLocalizations我见过通常有这两行:

//.........
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();

static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
//.........
委托(delegate)的实现看起来像这样:
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();

@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations localizations = new AppLocalizations(locale);
await localizations.load();

return localizations;
}

//... the rest omitted for brevity
}
请注意委托(delegate)上的加载方法返回 Future<AppLocalizations> . load 方法通常在 main 中调用一次,并且不再调用,因此您可以通过添加 AppLocalizations 的静态实例来利用它。给代表。所以现在你的代表看起来像这样:
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();

static AppLocalizations instance;

@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations localizations = new AppLocalizations(locale);
await localizations.load();

instance = localizations; // set the static instance here

return localizations;
}

//... the rest omitted for brevity
}
然后在您的 AppLocalizations您现在将拥有的类(class):
//.........
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();

static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}

static AppLocalizations get instance => _AppLocalizationsDelegate.instance; // add this
//.........

现在在您的翻译助手方法中,您可以拥有:
String tr(String key) {
return AppLocalizations.instance.translate(key);
}
不需要上下文。

关于无上下文的 flutter 本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61563074/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com