Flutter如何通过gen-l10n实现i18n国际化

在Flutter项目中,使用gen-l10n实现i18n国际化时遇到几个问题:

  1. 按照官方文档配置arb文件后,运行flutter gen-l10n命令没有生成对应的dart文件,该如何排查?
  2. 如何在arb文件中正确配置复数形式和性别等高级语法?
  3. 生成的本地化类无法在其他dart文件中引用,提示未定义,需要检查哪些配置?
  4. 动态切换语言时界面不自动刷新,是否需要手动处理?希望有完整的示例代码参考。
2 回复

Flutter 使用 gen-l10n 实现国际化的步骤如下:

  1. 添加依赖:在 pubspec.yaml 中添加 flutter_localizations 依赖,并启用 generate 选项。

  2. 创建 arb 文件:在项目根目录新建 l10n.yaml 文件,配置 arb 文件路径。然后在指定目录(如 lib/l10n)创建 app_en.arbapp_zh.arb 等文件,分别对应不同语言。

  3. 编写翻译内容:在 arb 文件中使用 JSON 格式定义键值对,例如:

    { "hello": "Hello!" }
    

    中文文件对应:

    { "hello": "你好!" }
    
  4. 生成代码:运行 flutter gen-l10n 自动生成 AppLocalizations 类,包含所有翻译字段。

  5. 配置 MaterialApp:在 MaterialApp 中设置 localizationsDelegatessupportedLocales,引用生成的 AppLocalizations.delegate

  6. 使用翻译:通过 AppLocalizations.of(context)!.hello 获取当前语言的文本。

简单高效,适合快速实现多语言支持!

更多关于Flutter如何通过gen-l10n实现i18n国际化的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,通过 gen-l10n 工具实现国际化的步骤如下:

1. 添加依赖

pubspec.yaml 中启用生成本地化支持:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # 添加此依赖
    sdk: flutter

flutter:
  generate: true # 启用代码生成
  uses-material-design: true

2. 创建 ARB 文件

在项目根目录下创建 l10n.yaml 文件,配置 ARB 文件路径:

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-dir: lib/l10n/generated

lib/l10n 目录下创建 ARB 文件(例如 app_en.arbapp_zh.arb):

app_en.arb(英文):

{
  "helloWorld": "Hello World!",
  "@helloWorld": {
    "description": "简单的欢迎语"
  }
}

app_zh.arb(中文):

{
  "helloWorld": "你好世界!"
}

3. 生成本地化代码

运行以下命令生成代码:

flutter gen-l10n

或直接构建项目(自动触发生成):

flutter run

生成的文件位于 lib/l10n/generated 目录。

4. 配置 MaterialApp

main.dart 中配置 MaterialApp 使用生成的本地化:

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // 导入生成的文件

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(AppLocalizations.of(context)!.helloWorld),
      ),
    );
  }
}

5. 测试切换语言

在设备或模拟器的系统设置中切换语言,App 将自动匹配对应的本地化文案。

注意事项:

  • ARB 文件需遵循格式,键名保持一致。
  • 描述字段(@key)可选,用于提供上下文。
  • 支持复数、性别等复杂语法(需在 ARB 中配置参数)。

通过以上步骤即可快速实现 Flutter 应用的国际化。

回到顶部