如何在 Flutter 包中添加本地化支持

Tah*_*Ali 19 localization internationalization flutter flutter-dependencies flutter-packages

我正在创建一个 Flutter 包,其中包含一些文本。我希望我的包的消费者应用程序将区域设置传递给它,根据该区域设置,我的包应该决定是否以“阿拉伯语”或“英语”显示此文本(这意味着我的包将具有包含这些字符串的资源文件语言环境)。我怎样才能实现这个目标?

我能够实现的唯一一件事是我的消费者应用程序具有资源文件,并且我的消费者应用程序和包都必须将相同的本地化插件注册为依赖项。我不希望我的消费者应用程序担心本地化,而是我的包应该处理基于区域设置的翻译字符串的显示。我的做法有什么问题吗?

小智 -3

为了在包内生成本地化文件:

  1. 创建 .arb 格式的本地化文件
  2. 使用以下设置在包的根文件夹中添加 l10n.yaml 文件:
# 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
Run Code Online (Sandbox Code Playgroud)
  1. 确保您的主本地化文件和“template-arb-file”名称相同
  2. 更新包的 pubspec.yaml 文件中的“dependency”和“flutter”,如下所示:
dependencies:
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0


flutter:
  uses-material-design: true
  generate: true
Run Code Online (Sandbox Code Playgroud)
  1. 在包根位置内运行“flutter pub get”
  2. 用 MaterialApp 包装你的主 UI 小部件
  3. 更新 MaterialApp 如下
MaterialApp(
              localizationsDelegates: AppLocalizations.localizationsDelegates,
              supportedLocales: AppLocalizations.supportedLocales,
      ),
Run Code Online (Sandbox Code Playgroud)
  1. 在小部件内调用本地化键:
Text(AppLocalizations.of(context)!.helloWorld)
Run Code Online (Sandbox Code Playgroud)

注意:基本上使用自定义 MaterialApp 在包根文件夹内的官方文档中执行几乎相同的步骤 https://docs.flutter.dev/development/accessibility-and-localization/internationalization

  • 这不是很有用,因为您很可能不会在包内使用“MaterialApp”小部件。 (3认同)