flutter intl插件如何使用

我在使用Flutter的intl插件时遇到了一些问题。这个插件具体该怎么配置和使用?我在pubspec.yaml中添加了依赖,也运行了flutter pub get,但是不知道接下来该怎么做。有没有详细的步骤说明?特别是如何生成arb文件,以及在代码中如何引用这些本地化字符串?希望有经验的朋友能分享一下具体的使用方法,谢谢!

2 回复

Flutter intl插件使用步骤:

  1. 在pubspec.yaml添加依赖
  2. 运行flutter pub get
  3. 创建arb文件定义本地化字符串
  4. 运行flutter pub run intl_translation:extract_to_arb生成arb模板
  5. 运行flutter pub run intl_translation:generate_from_arb生成dart代码
  6. 在MaterialApp中配置localizationsDelegates和supportedLocales

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


Flutter的intl插件用于应用国际化(i18n),支持多语言、日期、数字和消息格式化。以下是基本使用步骤:

1. 添加依赖pubspec.yaml中添加:

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1

2. 创建ARB文件 在项目根目录创建l10n文件夹,添加:

  • app_en.arb(英文):
{
  "helloWorld": "Hello World!",
  "@helloWorld": {
    "description": "Hello world message"
  }
}
  • app_zh.arb(中文):
{
  "helloWorld": "你好世界!"
}

3. 生成本地化代码pubspec.yaml中配置生成器:

flutter:
  generate: true

创建l10n.yaml文件:

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart

运行生成命令:

flutter gen-l10n

4. 配置MaterialApp

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

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

5. 使用本地化文本

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

其他功能:

  • 日期格式化
var now = DateTime.now();
String formatted = DateFormat.yMd().format(now); // 输出:7/10/2023
  • 数字格式化
String num = NumberFormat.decimalPattern().format(12345); // 输出:12,345

注意事项:

  • 每次修改ARB文件后需重新运行flutter gen-l10n
  • 使用AppLocalizations.of(context)!时确保上下文在MaterialApp内
  • 可通过Localizations.localeOf(context)获取当前语言设置

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

回到顶部