flutter国际化如何实现

在Flutter项目中如何实现国际化支持?我想让应用显示多国语言,目前知道需要用到intl包和arb文件,但不清楚具体操作步骤。能否详细说明如何配置本地化代理、创建翻译文件,以及如何在代码中动态切换语言?特别是如何处理文本、日期和货币等内容的本地化?

2 回复

Flutter国际化使用flutter_localizations包,通过MaterialApplocalizationsDelegatessupportedLocales配置。定义ARB文件管理多语言资源,使用intl包生成代码。

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


在Flutter中实现国际化(多语言支持)主要通过以下步骤完成:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:  # 添加此依赖
    sdk: flutter
  intl: ^0.18.1  # 用于消息格式化

2. 创建本地化资源

在项目根目录创建 l10n 文件夹,然后创建:

  • app_en.arb(英文)
{
  "title": "Hello World",
  "@title": {
    "description": "App title"
  }
}
  • app_zh.arb(中文)
{
  "title": "你好世界",
  "@title": {
    "description": "应用标题"
  }
}

3. 配置生成代码

pubspec.yaml 中配置:

flutter:
  generate: true
  localizations:
    supported-locales:
      - en
      - zh
    delegates:
      - AppLocalizations.delegate

4. 配置MaterialApp

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'l10n/app_localizations.dart';  // 自动生成的文件

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('en'),
        Locale('zh'),
      ],
      home: MyHomePage(),
    );
  }
}

5. 使用本地化文本

Text(AppLocalizations.of(context)!.title)

6. 生成代码

运行命令生成本地化类:

flutter pub get
flutter gen-l10n

7. 切换语言

Locale _locale = Locale('en');

void _changeLanguage(Locale locale) {
  setState(() {
    _locale = locale;
  });
}

// 在MaterialApp中设置
locale: _locale,

注意事项:

  • 每次修改 .arb 文件后需要重新运行 flutter gen-l10n
  • 支持语言代码和地区代码(如 zh_CN
  • 可以通过 Localizations.localeOf(context) 获取当前语言设置

这样就完成了Flutter应用的国际化和本地化配置。

回到顶部