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

问题描述 投票:0回答:3

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

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

flutter localization internationalization flutter-dependencies flutter-packages
3个回答
3
投票

我通过遵循另一个包中的操作来实现相同的操作 -

Catcher
。这是文件 - https://github.com/jhomlala/catcher/blob/master/lib/model/localization_options.dart


0
投票

我认为最正确的解决方案是使用

flutter_localizations
,就像这个官方示例:

https://github.com/flutter/website/blob/main/examples/internationalization/minimal/lib/main.dart


-2
投票

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

  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
  1. 确保您的主本地化文件和“template-arb-file”名称相同
  2. 更新包的 pubspec.yaml 文件中的“依赖项”和“flutter”,如下所示:
dependencies:
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0


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

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

© www.soinside.com 2019 - 2024. All rights reserved.