flutter_localizations和intl如何一起使用

我在Flutter项目中同时使用了flutter_localizations和intl包来实现多语言支持,但不知道如何正确配置让它们协同工作。具体遇到两个问题:

  1. 在MaterialApp中配置localizationsDelegates时,应该怎样排列flutter_localizations和intl生成的LocalizationDelegates的顺序?

  2. 使用intl生成arb文件后,如何确保本地化资源能够正确加载并覆盖flutter_localizations提供的默认Material本地化内容?

能否提供一个完整的配置示例,说明这两个库应该如何配合使用?

2 回复

在Flutter中使用flutter_localizationsintl实现国际化:

  1. 添加依赖:flutter_localizationsintl
  2. 创建ARB文件存储多语言文本。
  3. 使用flutter gen-l10n生成本地化类。
  4. 在MaterialApp中配置localizationsDelegatessupportedLocales
  5. 通过AppLocalizations.of(context)获取本地化文本。

更多关于flutter_localizations和intl如何一起使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,flutter_localizationsintl 包通常结合使用来实现应用的国际化(i18n)和本地化(l10n)。以下是基本步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # 使用最新版本
    sdk: flutter
  intl: ^0.18.1 # 使用最新版本

2. 配置 MaterialApp

main.dart 中配置支持的语言和本地化委托:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        // 添加自定义 AppLocalizations.delegate(下一步创建)
      ],
      supportedLocales: [
        const Locale('en', ''), // 英语
        const Locale('zh', 'CN'), // 中文简体
      ],
      home: MyHomePage(),
    );
  }
}

3. 使用 intl 生成本地化文件

  • 创建 ARB 文件:在项目根目录创建 l10n 文件夹,添加 app_en.arbapp_zh.arb

    // app_en.arb
    {
      "helloWorld": "Hello World!",
      "@helloWorld": {
        "description": "简单的问候语"
      }
    }
    
    // app_zh.arb
    {
      "helloWorld": "你好,世界!"
    }
    
  • 配置代码生成:在 pubspec.yaml 中添加:

    flutter:
      generate: true
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
      build_runner: ^2.0.0
    
  • 生成本地化类:运行命令生成代码:

    flutter pub get
    flutter gen-l10n
    

    生成的文件位于 lib/generated/l10n.dart

4. 在应用中使用本地化

import 'package:flutter/material.dart';
import 'generated/l10n.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(S.of(context).helloWorld), // 自动根据语言环境显示
      ),
    );
  }
}

关键点:

  • flutter_localizations 提供基础组件(如日期、数字)的本地化。
  • intl 包通过 ARB 文件管理自定义文本,并生成类型安全的本地化类。
  • 使用 S.of(context) 获取当前语言的文本。

通过以上步骤,即可实现多语言支持,并根据设备语言自动切换。

回到顶部