Flutter 中如何进行国际化和本地化?

推荐答案

在 Flutter 中进行国际化和本地化通常使用 flutter_localizations 包和 intl 包。以下是实现步骤:

  1. 添加依赖:在 pubspec.yaml 文件中添加 flutter_localizationsintl 依赖。

  2. 配置 MaterialApp:在 MaterialApp 中配置 localizationsDelegatessupportedLocales

    -- -------------------- ---- -------
    ------ --------------------------------
    ------ -----------------------------------------------------------
    
    ---- ------ -
      ----------------
    -
    
    ----- ----- ------- --------------- -
      ---------
      ------ ------------------ -------- -
        ------ ------------
          ----------------------- -
            -------------------------------------
            ------------------------------------
            --------------------------------------
          --
          ----------------- -
            ----- ------------ ------ -- --
            ----- ------------ ------ -- --
          --
          ----- -------------
        --
      -
    -
  3. 创建本地化文件:使用 intl 包生成本地化文件。

    • 创建一个 l10n 目录,并在其中创建 intl_en.arbintl_zh.arb 文件。
    -- -------------------- ---- -------
    -- -----------
    -
      -------- ------ -------
      --------- -
        -------------- ---- ----- -- --- ----
      -
    -
    
    -- -----------
    -
      -------- --------
      --------- -
        -------------- ---------
      -
    -
  4. 生成本地化类:使用 flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/l10n/intl_messages.dart 生成 intl_messages.dart 文件,然后使用 flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/l10n/intl_messages.dart lib/l10n/intl_*.arb 生成本地化类。

  5. 使用本地化字符串:在应用中使用生成的本地化字符串。

    -- -------------------- ---- -------
    ------ --------------------------------
    ------ -------------------------
    ------ -------------------------
    
    ----- ---------- ------- --------------- -
      ---------
      ------ ------------------ -------- -
        ------ ---------
          ------- -------
            ------ ----------------------------
          --
          ----- -------
            ------ ----------------------------
          --
        --
      -
    -

本题详细解读

1. 依赖管理

flutter_localizations 是 Flutter 提供的官方本地化支持包,包含了 Material 和 Cupertino 组件的本地化资源。intl 包则用于处理国际化和本地化的字符串管理。

2. MaterialApp 配置

MaterialApp 中配置 localizationsDelegatessupportedLocales 是为了告诉 Flutter 应用支持哪些语言,并使用哪些本地化代理。GlobalMaterialLocalizations.delegateGlobalWidgetsLocalizations.delegate 是 Material 和 Widgets 的本地化代理,GlobalCupertinoLocalizations.delegate 是 Cupertino 风格的本地化代理。

3. 本地化文件

intl_en.arbintl_zh.arb 是 Application Resource Bundle 文件,用于存储不同语言的字符串。arb 文件是 JSON 格式的,易于编辑和维护。

4. 生成本地化类

通过 intl_translation 工具,可以将 arb 文件转换为 Dart 代码,生成对应的本地化类。这些类包含了不同语言的字符串映射,方便在代码中使用。

5. 使用本地化字符串

在代码中通过 Intl.message 方法获取本地化字符串。Intl.message 会根据当前设备的语言设置自动选择对应的字符串。

通过以上步骤,Flutter 应用可以实现多语言支持,适应不同地区的用户需求。

纠错
反馈