如何在 BLOC、Cubit 和 Repositories 中使用 flutter 国际化来翻译消息?
How to use flutter internationalization inside BLOC, Cubit And Repositories for translate messages?
我正在使用 Flutter 开发多语言应用程序。
我使用 flutter_localizations 包进行本地化,intl 包进行国际化。
在 Widgets 中的正常方式,我可以在 Context 的帮助下使用它。
但问题是当我想在存储库或除 UI 层之外的其他层中使用国际化时。
除了 UI(我们无法访问 Context)之外的其他层内进行国际化的最佳实践是什么在 Api、Repository、Bloc 或 Cubit?
中使用国际化的示例
注意:我正在寻找一种在应用程序的 BLOC(业务逻辑)内部使用国际化的方法,而不是 UI!
一般来说,最好避免在 UI 层之外使用本地化。如果您使用的是 BLoC 库,则可以在 BlocListener 中显示对话框、快餐栏和类似的小部件。您还可以为您的状态编写一个扩展来处理 UI 层中的本地化。
但是,有一些方法可以在没有 BuildContext 的情况下使用本地化。例如:
- 您可以使用像 GetIt 这样的服务定位器来访问 AppLocalizations。在 GetIt 的帮助下,您将能够在没有上下文的情况下按类型访问实例。但在 AppLocalizations 的情况下,我们需要将其注册为单例/惰性单例。请注意,您需要向您的应用程序提供这个确切的单例委托,因此您将访问与本地化委托列表中相同的对象。
简短示例:
import 'package:get_it/get_it.dart';
GetIt getIt= GetIt.instance;
void setupServiceLocator() {
getIt.registerLazySingleton(() => AppLocalizations());
}
- 您可以通过直接加载并指定语言环境来访问 LocalizationsDelegate 的实例。例如:
AppLocalizations i10n = await AppLocalizations.delegate.load(Locale('en'));
- 您可以使用不同的本地化库,它不需要上下文来访问翻译对象(如 easy_localization)。通过使用代码生成,您将能够在没有上下文的情况下访问您的翻译密钥。
我正在使用 Flutter 开发多语言应用程序。
我使用 flutter_localizations 包进行本地化,intl 包进行国际化。
在 Widgets 中的正常方式,我可以在 Context 的帮助下使用它。
但问题是当我想在存储库或除 UI 层之外的其他层中使用国际化时。
除了 UI(我们无法访问 Context)之外的其他层内进行国际化的最佳实践是什么在 Api、Repository、Bloc 或 Cubit?
中使用国际化的示例注意:我正在寻找一种在应用程序的 BLOC(业务逻辑)内部使用国际化的方法,而不是 UI!
一般来说,最好避免在 UI 层之外使用本地化。如果您使用的是 BLoC 库,则可以在 BlocListener 中显示对话框、快餐栏和类似的小部件。您还可以为您的状态编写一个扩展来处理 UI 层中的本地化。
但是,有一些方法可以在没有 BuildContext 的情况下使用本地化。例如:
- 您可以使用像 GetIt 这样的服务定位器来访问 AppLocalizations。在 GetIt 的帮助下,您将能够在没有上下文的情况下按类型访问实例。但在 AppLocalizations 的情况下,我们需要将其注册为单例/惰性单例。请注意,您需要向您的应用程序提供这个确切的单例委托,因此您将访问与本地化委托列表中相同的对象。
简短示例:
import 'package:get_it/get_it.dart';
GetIt getIt= GetIt.instance;
void setupServiceLocator() {
getIt.registerLazySingleton(() => AppLocalizations());
}
- 您可以通过直接加载并指定语言环境来访问 LocalizationsDelegate 的实例。例如:
AppLocalizations i10n = await AppLocalizations.delegate.load(Locale('en'));
- 您可以使用不同的本地化库,它不需要上下文来访问翻译对象(如 easy_localization)。通过使用代码生成,您将能够在没有上下文的情况下访问您的翻译密钥。