本文记录了我在学习 Timecop 开源项目时,自己一步步在 TimeLens 项目中实现 Flutter 国际化(i18n)功能的完整过程。
希望这篇文章能帮到正在学习 Flutter 国际化的新手同学。
🧩 一、适用开发环境
| 项目 | 说明 |
|---|---|
| 操作系统 | Windows |
| IDE | Android Studio 2025 |
| Flutter SDK | 3.35.7 |
| JDK | 17 |
| Android SDK | 36 |
| 测试平台 | Android 模拟器 |
| 使用语言 | Dart |
| 使用依赖 | fluent 2.0.3 |
🧠 二、学习来源:基于 Timecop 源码
我是在学习开源项目 Timecop 的过程中接触到国际化功能的。
💡 Fluent 是 Mozilla 推出的国际化方案,它比传统 JSON 或 ARB 更强大,支持插值变量、性别、复数等表达方式,非常适合多语言场景。
📂 三、国际化目录结构
模拟项目目录结构如下:
timelens/
├── assets/
│ └── l10n/ # 存放各语言的 flt 文件
│ ├── en.flt
│ ├── zh_CN.flt
│ ├── zh_TW.flt
│ └── nb_NO.flt
│
├── lib/
│ ├── data_providers/
│ │ └── l10n/
│ │ ├── fluent_l10n_provider.dart # 使用 Fluent 库解析 flt
│ │ └── l10n_provider.dart # 管理语言加载逻辑
│ └── l10n.dart # 全局访问入口(L10N.of)
│
└── pubspec.yaml
📘 简要说明:
-
assets/l10n/:用于存放不同语言的.flt文件(格式为key=value)。 -
fluent_l10n_provider.dart:负责读取.flt文件并解析为内存中的多语言文本。 -
l10n_provider.dart:管理当前语言的加载与切换。 -
l10n.dart:提供统一访问接口,方便在页面中调用文案。
⚙️ 四、依赖配置(添加依赖说明)
在 pubspec.yaml 文件中添加Fluent依赖与资源路径配置:
dependencies:
flutter:
sdk: flutter
fluent: ^2.0.3
provider: ^6.0.5 # 用于状态管理
flutter:
uses-material-design: true
assets:
- assets/l10n/
执行命令以安装依赖:
flutter pub get
💡
fluent用于解析.flt文件格式的多语言资源。
.flt文件语法简洁、可支持变量插值,比传统.arb更易读。
🏗️ 五、MaterialApp 国际化集成(待项目完成后统一集成)
在本阶段,我的重点是完成多语言数据的加载与管理逻辑。
MaterialApp 的国际化配置部分(包括 localizationsDelegates、supportedLocales、locale 等)将在整个项目结构完成后 统一集成。
🔄 六、国际化开发流程图
以下是整个 Flutter 国际化功能的开发流程:
┌──────────────────────────┐
│ 创建 l10n 目录 │
│ └─ 编写 .flt 文件 │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ 编写 fluent_l10n_provider │
│ └─ 负责读取并解析 flt │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ 编写 l10n_provider.dart │
│ └─ 控制当前语言与切换 │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ 创建 l10n.dart │
│ └─ 提供全局访问接口 │
└──────────┬───────────────┘
│
▼
┌──────────────────────────┐
│ MaterialApp 集成阶段 │
│ └─ 完成统一多语言注册 │
└──────────────────────────┘

被折叠的 条评论
为什么被折叠?



