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 应用的国际化,让应用突破语言的限制,走向更广阔的市场。

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

相关推荐
90后的晨仔21 分钟前
Flutter 中常见的几种页面跳转方式
前端·flutter
90后的晨仔41 分钟前
Flutter滚动组件全面解析
前端·flutter
张风捷特烈2 小时前
每日一题 Flutter#2 | 如何理解 Widget 的不可变性
android·flutter·面试
李新_15 小时前
我们使用了哪些Flutter 三方库(二)
android·flutter·ios
getapi18 小时前
flutter开发安卓APP适配不同尺寸的手机屏幕
android·flutter·智能手机
倾云鹤18 小时前
Flutter实现不规则瀑布流布局拖拽重排序
flutter
恋猫de小郭18 小时前
腾讯 ovCompose 开源,Kuikly 鸿蒙和 Compose DSL 开源,腾讯的“双”鸿蒙方案发布
android·前端·flutter
zcychong1 天前
FlutterPlugin支持鸿蒙Next
flutter·harmonyos
newki1 天前
【Flutter】FCM与Notifications集成流程
flutter·app
张风捷特烈1 天前
每日一题 Flutter#1 | 说说你对声明式 UI 的理解
android·flutter