flutter_localizations:轻松实现Flutter国际化

作为一名 Flutter 开发者,如何快速高效地让我们的应用支持多语言呢?

今天就来聊聊 flutter_localizations 这个神器,带你轻松实现 Flutter 国际化!

flutter_localizations是Flutter 官方推荐的国际化解决方案,与 Flutter 框架深度集成,稳定性和兼容性无需担心。

它的扩展性极强,当你的应用需要新增语言时,只需简单配置就能完成,大大降低了开发成本和维护难度。

01. 安装依赖

这里用的flutter_localizations是官方SDK的Package,不同于pub.dev上的名为flutter_localization的Package。

flutter_localizations依赖的intl版本lock在了0.19.0,所以不能用pub.dev上最新版本。

pubspec.yamlflutter对应小节加上generate: true

后续多国语言资源文件变更时运行flutter gen-l10n即可重新生成语言资源API代码文件

yaml 复制代码
pubspec.yaml

dependencies:
	flutter_localizations:  
		sdk: flutter  
	intl: 0.19.0
	
flutter:
	generate: true

然后运行flutter pub get更新依赖。

02. 创建l10n配置文件

pubspec.yaml同级创建l10n.yaml

makefile 复制代码
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
  • arb-dir:指定语言资源文件位置
  • template-arb-file:指定模板使用哪个语言的文件
  • output-localization-file:指定生成的语言资源API代码文件名,便于在渲染Widget时引用

03. 手动创建需要支持的语言资源文件

默认文件名格式是app_{LANG-CODE}.arb,如英语则为app_en.arb,中文则为app_zh.arb

更多语言代码参考:

GlobalMaterialLocalizations class - flutter_localizations library - Dart API

应用里用到字符串渲染时先在arb资源文件里定义,以简单的欢迎语为例:

普通字符串hello称为资源(Resource)ID,Widget里引用其值的时候,可以通过语言资源API对象点语法操作取值。

@开头的字符串@hello称为资源属性,定义对应Resource的元数据,数据类型,描述等

示例中hello对应Resource里带有一个placeholder参数userName,对应取值形式是作为带参数函数调用。

其他常用语法可以参考文档: i18n | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

04. 生成语言资源API代码

运行flutter gen-l10n,没有错误信息说明生成成功。 生成的文件在.dart_tool/flutter_gen/gen_l10n目录里,

05. 应用入口类里全局配置

main.dart

arduino 复制代码
`import`语言资源:
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

MaterialApp添加初始化参数:
localizationsDelegates: AppLocalizations.localizationsDelegates,  
supportedLocales: AppLocalizations.supportedLocales,

06. Widget的build上下文里引用对应Resource

这里有个地方要注意,引用语言资源不能直接在MaterialApp里使用。 如下图用法运行会报空安全异常

Material 应用必须启动完成后才能初始化 AppLocalizations

如果应用尚未完全启动, AppLocalizations.of(context)!.helloWorld 将导致空异常。

然后单独创建一个Widget就可以正常运行了

  • 17行在MaterialApp里可以通过指定语言代码来测试

07. 总结

通过 flutter_localizations,我们能够轻松实现 Flutter 应用的国际化,让应用突破语言的限制,走向更广阔的市场。

从基础配置到动态切换,再到避坑指南,相信大家对它已经有了全面的了解。

相关推荐
猫林老师4 小时前
Flutter for HarmonyOS 开发指南(一):环境搭建与项目创建
flutter·华为·harmonyos
sunly_15 小时前
Flutter:视频预览功能
javascript·flutter·音视频
勤劳打代码18 小时前
条分缕析 —— 通过 Demo 深入浅出 Provider 原理
flutter·面试·dart
2501_9159184119 小时前
Flutter 加固方案对比与实战,多工具组合的跨平台安全体系(Flutter App 加固/IPA 成品混淆/Ipa Guard CLI/自动化安全流程)
安全·flutter·ios·小程序·uni-app·自动化·iphone
Bryce李小白19 小时前
Flutter中mixing的原理及应用场景
flutter
_大学牲19 小时前
从 0 到上架:用 Flutter 一天做一款功德木鱼
前端·flutter·apple
嚴寒19 小时前
2025最终!Mac配置Flutter全平台开发环境完整指南(亲测有效)
前端·flutter
Bryce李小白1 天前
Flutter版本管理工具FVM
flutter
程序员老刘2 天前
Dart 3.7格式化工具“乱改代码”?强迫症必看
flutter·代码规范·dart