news 2026/5/26 8:25:49

Flutter 国际化(i18n)全指南:一键切换中/英/日多语言

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 国际化(i18n)全指南:一键切换中/英/日多语言

一、为什么需要国际化?

如果你的应用面向全球用户,多语言支持是基本要求。Flutter 官方提供了强大的flutter_localizations包,配合intl工具,可轻松实现多语言切换。


二、快速上手:三步实现中英文切换

步骤 1:添加依赖

yaml

编辑

# pubspec.yaml dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.19.0

步骤 2:配置 MaterialApp

dart

编辑

import 'package:flutter_localizations/flutter_localizations.dart'; void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( localizationsDelegates: const [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [ Locale('en', ''), // 英语 Locale('zh', ''), // 中文 Locale('ja', ''), // 日语 ], home: HomePage(), ); } }

步骤 3:使用AppLocalizations

dart

编辑

// 获取当前语言文本 Text(AppLocalizations.of(context)!.helloWorld)

⚠️ 但此时会报错:缺少AppLocalizations类!


三、生成多语言资源文件(关键步骤)

1. 创建l10n.yaml文件(项目根目录)

yaml

编辑

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

2. 创建语言文件

  • lib/l10n/app_en.arb

    json

    编辑

    { "helloWorld": "Hello World", "welcomeMessage": "Welcome, {name}!" }
  • lib/l10n/app_zh.arb

    json

    编辑

    { "helloWorld": "你好,世界", "welcomeMessage": "欢迎,{name}!" }
  • lib/l10n/app_ja.arb

    json

    编辑

    { "helloWorld": "こんにちは、世界", "welcomeMessage": "ようこそ、{name}さん!" }

3. 生成代码

bash

编辑

flutter gen-l10n

✅ 自动生成app_localizations.dart,无需手动编写!


四、动态切换语言(带保存)

dart

编辑

// 切换语言并重启应用 void changeLanguage(BuildContext context, String locale) { final MyAppState? state = context.findAncestorStateOfType<MyAppState>(); if (state != null) { state.setLocale(Locale(locale)); } } // 在 MyApp 中管理状态 class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => MyAppState(); } class MyAppState extends State<MyApp> { late Locale _locale; @override void initState() { super.initState(); _locale = const Locale('zh'); // 默认中文 } void setLocale(Locale locale) { setState(() { _locale = locale; }); } @override Widget build(BuildContext context) { return MaterialApp( locale: _locale, // ...其他配置同上 ); } }

💡 可结合shared_preferences保存用户选择。


五、实际效果展示

语言截图
中文
English
日本語

📌 支持参数化文本:AppLocalizations.of(context)!.welcomeMessage('张三')


六、高级技巧

  1. 复数形式(如 “1 item” vs “2 items”):

    arb

    编辑

    "itemCount": "{count, plural, =0{无项目} =1{1个项目} other{{count}个项目}}"
  2. 日期/数字本地化

    dart

    编辑

    DateFormat.yMMMd().format(DateTime.now()); // 自动适配语言格式
  3. RTL 语言支持(如阿拉伯语):

    dart

    编辑

    MaterialApp( supportedLocales: [Locale('ar')], localizationsDelegates: [...], theme: ThemeData(useMaterial3: true), )

    Flutter 会自动镜像布局!


七、结语

国际化不再是“附加功能”,而是产品出海的必备能力。Flutter 的gen-l10n工具链让多语言开发变得简单高效。

完整示例代码:github.com/yourname/flutter-i18n-demo

如果你正在做全球化 App,不妨现在就集成 i18n!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 8:06:56

vue3生成的word中图片是空白

问题分析在Vue3项目中生成Word文档时出现图片空白的情况&#xff0c;通常是由于图片处理方式不当或文档生成工具的限制导致的。常见原因包括&#xff1a;图片路径问题、异步加载未完成、Base64编码错误或Word生成库对图片的支持不足。解决方案检查图片路径和加载状态 确保图片路…

作者头像 李华
网站建设 2026/5/26 5:41:46

为什么联合索引会优先使用前导字段,而不是非前导字段

好的&#xff01;我们用通俗的例子和索引的底层原理来解释为什么优化器会优先使用联合索引的前导字段&#xff08;即联合索引的第一个字段&#xff09;&#xff0c;以及为什么这种设计更高效。一、索引的底层结构&#xff1a;B树数据库索引&#xff08;如InnoDB的B树索引&#…

作者头像 李华
网站建设 2026/5/25 10:38:10

华为HiSuite评测:功能、优点、缺点及最佳替代方案

华为HiSuite是华为官方开发的桌面管理工具&#xff0c;旨在帮助用户在电脑上管理华为手机。借助它&#xff0c;您可以备份数据、恢复文件、更新系统软件以及在手机和电脑之间传输内容。但华为HiSuite真的容易上手吗&#xff1f;它是否支持用户关心的所有数据类型&#xff1f;如…

作者头像 李华
网站建设 2026/5/26 5:34:11

风光储并网发电系统仿真模型 共直流母线式风光储:风力发电+光伏发电+储能+三相逆变并网 ①光伏...

风光储并网发电系统仿真模型 共直流母线式风光储&#xff1a;风力发电光伏发电储能三相逆变并网 ①光伏Boost:采用电导增量法来实现光伏板最大功率跟踪 ②风机&#xff1a;拓扑采用三相整流电路&#xff0c;控制采用MPPT控制 ③蓄电池储能&#xff1a;采用双向Buck_Boost电路&a…

作者头像 李华
网站建设 2026/5/26 4:45:03

调研分享 | 面向异构集群环境的分布式训练并行方案调研

大规模的神经网络模型需要依托分布式集群环境完成载入和训练。技术演进不仅让模型规模膨胀&#xff0c;支撑算力的硬件也迭代升级&#xff0c;如何充分利用异构算力将成为难题。调研分享在异构集群下并行训练的近期研究。 1 模型分布式训练的并行策略 训练神经网络模型就像是在…

作者头像 李华
网站建设 2026/5/26 6:54:29

正弦波高频注入仿真模型

正弦波高频注入仿真模型最近在研究正弦波高频注入的仿真模型&#xff0c;感觉这东西挺有意思的。高频注入技术在很多领域都有应用&#xff0c;比如电机控制、电力系统等。今天就来聊聊怎么用Python实现一个简单的正弦波高频注入仿真模型。首先&#xff0c;我们需要生成一个正弦…

作者头像 李华