我正在创建一个 Flutter 包,其中包含一些文本。我希望我的包的消费者应用程序将区域设置传递给它,根据该区域设置,我的包应该决定是否以“阿拉伯语”或“英语”显示此文本(这意味着我的包将具有包含这些字符串的资源文件语言环境)。 我怎样才能实现这个目标?
我能够实现的唯一一件事是我的消费者应用程序具有资源文件,并且我的消费者应用程序和包都必须注册相同的本地化插件作为依赖项。我不希望我的消费者应用程序担心本地化,而是我的包应该处理基于区域设置的翻译字符串的显示。 我的做法有什么问题吗?
我通过遵循另一个包中的操作来实现相同的操作 -
Catcher
。这是文件 - https://github.com/jhomlala/catcher/blob/master/lib/model/localization_options.dart
我认为最正确的解决方案是使用
flutter_localizations
,就像这个官方示例:
https://github.com/flutter/website/blob/main/examples/internationalization/minimal/lib/main.dart
为了在包内生成本地化文件:
# Where to find translation files
arb-dir: lib/l10n
# Which translation is the default/template
template-arb-file: app_en.arb
# What to call generated dart files
output-localization-file: app_localizations.dart
dependencies:
flutter_localizations:
sdk: flutter
intl: ^0.17.0
flutter:
uses-material-design: true
generate: true
MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
),
Text(AppLocalizations.of(context)!.helloWorld)
注意:基本上使用自定义 MaterialApp 在包根文件夹内的官方文档中执行几乎相同的步骤 https://docs.flutter.dev/development/accessibility-and-localization/internationalization