Flutter实现国际化(多语言)
在全球化趋势下应用支持多语言是非常重要的。Flutter 提供了强大的国际化i18n支持可以通过 flutter_localizations 与 gen-l10n 工具生成的本地化类来实现不同区域和语言的适配。本篇博客将介绍如何在 Flutter 项目中使用 flutter_localizations并实现多语言支持与动态切换。效果图1. 什么是国际化i18n和本地化l10n国际化i18n是指编写软件使其能够在不同的语言和文化环境中运行。它包含了将软件中的文本、日期、时间等元素抽象出来以便根据用户的区域设置进行翻译和显示。本地化l10n是国际化的具体应用步骤它包括将应用程序的语言、日期格式、货币符号等内容适配到特定地区。2. 配置在settings - plugins里下载intl插件需要在 pubspec.yaml 中添加依赖dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter在最底部加上flutter_intl: enabled: true运行 flutter pub get 下载依赖会自动生成文件,他默认生成一个英文的文件修改 MaterialApp 以支持国际化在 MaterialApp 中配置 localizationsDelegates 和 supportedLocales 以支持本地化。具体代码如下class MyApp extends StatefulWidget { override StateMyApp createState() _MyAppState(); } class _MyAppState extends StateMyApp { Locale _locale Locale(en); // 默认语言 void setLocale(Locale locale) { setState(() { _locale locale; }); } override Widget build(BuildContext context) { return MaterialApp( locale: _locale,// 设置当前的 Locale localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [ Locale(en, US), //英文 Locale(zh, CN), //简体中文 Locale(zh, TW) //繁体中文 ], home: MyHomePage( onLocaleChange: (Locale locale) { setLocale(locale); }, ), ); } }3. 添加和生成语言文件intl 使用 .arb 文件来存储不同语言的翻译资源。接下来我们点击Tools - Flutter Intl - Add Local可以新增其他语言我们可以加上中文简体zh 和繁体zh_TW语言文件示例lib/l10n/intl_en.arb:{ content: china }lib/l10n/intl_zh.arb:{ content: 中国 }lib/l10n/intl_zh_TW.arb:{ content: 中國 }4.动态切换语言5.通过手机系统语言来显示对应语言的话6.完整示例代码:import package:flutter/material.dart; import package:flutter_localizations/flutter_localizations.dart; import generated/l10n.dart; void main() { runApp(MyApp()); } class MyApp extends StatefulWidget { override StateMyApp createState() _MyAppState(); } class _MyAppState extends StateMyApp { Locale _locale const Locale(en, US); // 默认语言 void setLocale(Locale locale) { setState(() { _locale locale; }); } override Widget build(BuildContext context) { return MaterialApp( locale: _locale, // 设置当前的 Locale localizationsDelegates: const [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: const [ Locale(en, US), //英文 Locale(zh, CN), //简体中文 Locale(zh, TW), //繁体中文 Locale(zh, UG) //维语 ], //如果使用系统语言使用下面的 /*localeResolutionCallback: (locale, supportedLocales) { if (locale?.countryCode CN) {// 如果语言是简体 return const Locale(zh, CN); } else if (locale?.countryCode TW) {// 如果语言繁体 return const Locale(zh, TW); } else { return const Locale(en, US); } },*/ home: MyHomePage( onLocaleChange: (Locale locale) { setLocale(locale); }, ), ); } } class MyHomePage extends StatelessWidget { final Function(Locale) onLocaleChange; const MyHomePage({Key? key, required this.onLocaleChange}) : super(key: key); override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text(Flutter 国际化 Demo), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: Widget[ //此处国际化文字 Text( S.current.content, style: const TextStyle( color: Colors.red, fontSize: 50, fontWeight: FontWeight.w700), ), changeButton(const Locale(zh, CN), 简体), changeButton(const Locale(zh, TW), 繁体), changeButton(const Locale(en, US), 英文), changeButton(const Locale(zh, UG), 维语), ], ), ), ); } Widget changeButton(Locale newLocale, String text) { return ElevatedButton( onPressed: () { onLocaleChange(newLocale); // 调用 MyAppState 的 setLocale 方法 }, child: Text(text), ); } }希望这篇文章对你了解 Flutter 国际化有所帮助

相关新闻

STM32硬件I2C驱动0.96寸OLED屏幕

STM32硬件I2C驱动0.96寸OLED屏幕

0.96寸OLED屏幕 0.96寸:屏幕对角线长0.96英寸 驱动:SSD1306驱动IC,驱动芯片内置128*64的SRAM存储器,用于缓存要显示的数据 分辨率:128*64(横128,竖64) 供电:3.3V&…

2026/11/9 12:40:55 阅读更多 →
乌鲁木齐无人应用技术专业学校选择经验分享

乌鲁木齐无人应用技术专业学校选择经验分享

引言随着低空经济的蓬勃发展,无人机技术已渗透至农业植保、电力巡检、物流配送等多个领域,专业人才需求激增。对于希望进入这一行业的学习者来说,选择一所合适的无人机技校至关重要。本文将基于亲身体验及行业调研,为读者提供一份…

2026/11/5 22:28:07 阅读更多 →
2026年辽宁智慧燃气安全监测服务商甄选指南

2026年辽宁智慧燃气安全监测服务商甄选指南

辽宁作为东北老工业基地核心省份,燃气管网总里程超10万公里。沈阳、大连、鞍山等城市存在大量服役超30年的老旧管线,管道腐蚀和泄漏风险突出。冬季严寒期长达5个月,供暖季天然气消费量巨大,与燃气发电、工业用气叠加形成多重用气高…

2026/11/6 7:38:52 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻