当前位置: 首页 > article >正文

【Flutter for OpenHarmony】第三方库intl 国际化与多语言支持的鸿蒙化适配与实战指南

【Flutter for OpenHarmony】intl 国际化与多语言支持的鸿蒙化适配与实战指南欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net一、为什么我要做国际化我是 IntMainJhy上海某高校大一计算机专业的学生。说起国际化i18n我一开始完全没想过要加这个功能。后来室友问我“你这个 App 能改成英文的吗我想让我的外国朋友也用用。”我才意识到我的 App 完全是中文特供没有任何国际化支持。于是我开始研究 Flutter 的国际化方案。二、intl 介绍2.1 什么是 intlintl是 Flutter 官方提供的国际化包# pubspec.yamldependencies:intl:^0.19.0flutter_localizations:sdk:flutter2.2 核心概念概念说明.arb文件ARB 格式的翻译文件Intl类格式化文本的类Localizations本地化加载器三、项目配置3.1 pubspec.yamldependencies:flutter:sdk:flutterflutter_localizations:sdk:flutterintl:^0.19.0flutter:generate:true# 启用国际化生成3.2 l10n.yaml# l10n.yamlarb-dir:lib/l10ntemplate-arb-file:app_en.arboutput-localization-file:app_localizations.dartoutput-class:AppLocalizations3.3 创建翻译文件// lib/l10n/app_en.arb{locale:en,appTitle:Mental Health,moodRecord:Mood Record,meditation:Meditation,quiz:Psychology Test,breathing:Breathing,settings:Settings,happy:Happy,calm:Calm,neutral:Neutral,sad:Sad,tired:Tired,startMeditation:Start Meditation,stopMeditation:Stop Meditation,recordMood:Record Mood,noData:No data yet,loading:Loading...}// lib/l10n/app_zh.arb{locale:zh,appTitle:心理健康,moodRecord:心情记录,meditation:冥想,quiz:心理测试,breathing:呼吸训练,settings:设置,happy:开心,calm:平静,neutral:一般,sad:难过,tired:疲惫,startMeditation:开始冥想,stopMeditation:停止冥想,recordMood:记录心情,noData:暂无数据,loading:加载中...}四、国际化 Provider// lib/mental_health/providers/locale_provider.dartimportpackage:flutter/material.dart;importpackage:shared_preferences/shared_preferences.dart;/// 语言 ProviderclassLocaleProviderextendsChangeNotifier{staticconstString_localeKeyapp_locale;Locale_localeconstLocale(zh);// 默认中文bool _isLoadingtrue;Localegetlocale_locale;boolgetisLoading_isLoading;/// 获取语言名称StringgetlanguageName{switch(_locale.languageCode){casezh:return简体中文;caseen:returnEnglish;default:return简体中文;}}/// 初始化Futurevoidinitialize()async{_isLoadingtrue;notifyListeners();try{finalprefsawaitSharedPreferences.getInstance();finalsavedLocaleprefs.getString(_localeKey);if(savedLocale!null){_localeLocale(savedLocale);}}catch(e){debugPrint(加载语言设置失败:$e);}finally{_isLoadingfalse;notifyListeners();}}/// 设置语言FuturevoidsetLocale(Localelocale)async{if(_localelocale)return;_localelocale;finalprefsawaitSharedPreferences.getInstance();awaitprefs.setString(_localeKey,locale.languageCode);notifyListeners();}/// 切换语言FuturevoidtoggleLocale()async{if(_locale.languageCodezh){awaitsetLocale(constLocale(en));}else{awaitsetLocale(constLocale(zh));}}}五、在应用中使用// main.dartvoidmain()async{WidgetsFlutterBinding.ensureInitialized();// 初始化语言设置finallocaleProviderLocaleProvider();awaitlocaleProvider.initialize();runApp(ChangeNotifierProvider.value(value:localeProvider,child:constMentalHealthApp(),),);}classMentalHealthAppextendsStatelessWidget{constMentalHealthApp({super.key});overrideWidgetbuild(BuildContextcontext){returnConsumerLocaleProvider(builder:(context,localeProvider,child){returnMaterialApp(title:Mental Health,debugShowCheckedModeBanner:false,// 本地化配置locale:localeProvider.locale,supportedLocales:const[Locale(zh),Locale(en),],localizationsDelegates:const[GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,],home:constMentalHealthHomeScreen(),);},);}}六、使用翻译文本6.1 生成后使用// 生成后会自动创建 AppLocalizations 类importpackage:flutter_gen/gen_l10n/app_localizations.dart;// 使用Text(AppLocalizations.of(context)!.appTitle)6.2 自定义翻译方法// lib/mental_health/utils/translations.dart/// 翻译辅助类classTranslations{staticStringt(BuildContextcontext,Stringkey){finallocaleLocalizations.localeOf(context).languageCode;return_translations[locale]?[key]??key;}staticfinalMapString,MapString,String_translations{zh:{appTitle:心理健康,moodRecord:心情记录,meditation:冥想,quiz:心理测试,breathing:呼吸训练,settings:设置,},en:{appTitle:Mental Health,moodRecord:Mood Record,meditation:Meditation,quiz:Psychology Test,breathing:Breathing,settings:Settings,},};}七、语言设置页面// lib/mental_health/screens/language_settings_screen.dartclassLanguageSettingsScreenextendsStatelessWidget{constLanguageSettingsScreen({super.key});overrideWidgetbuild(BuildContextcontext){returnScaffold(appBar:AppBar(title:Text(Translations.t(context,settings)),),body:ConsumerLocaleProvider(builder:(context,provider,child){returnListView(padding:constEdgeInsets.all(16),children:[Card(child:Column(children:[ListTile(leading:constText(,style:TextStyle(fontSize:24)),title:constText(简体中文),trailing:provider.locale.languageCodezh?constIcon(Icons.check,color:Colors.green):null,onTap:()provider.setLocale(constLocale(zh)),),constDivider(height:1),ListTile(leading:constText(,style:TextStyle(fontSize:24)),title:constText(English),trailing:provider.locale.languageCodeen?constIcon(Icons.check,color:Colors.green):null,onTap:()provider.setLocale(constLocale(en)),),],),),],);},),);}}八、鸿蒙平台适配适配点语言检测// 鸿蒙设备语言检测FuturevoiddetectSystemLocale()async{finalsystemLocaleWidgetsBinding.instance.platformDispatcher.locale;debugPrint(系统语言:${systemLocale.languageCode});}九、我的踩坑记录坑1翻译文件格式错误问题flutter gen-l10n失败。解决确保.arb文件格式正确。坑2语言不生效问题设置了语言但界面没有变化。解决检查localizationsDelegates配置。十、大一学生真实学习总结国际化让我的 App 可以被更多人使用。作者IntMainJhy创作时间2026年5月

相关文章:

【Flutter for OpenHarmony】第三方库intl 国际化与多语言支持的鸿蒙化适配与实战指南

【Flutter for OpenHarmony】intl 国际化与多语言支持的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net一、为什么我要做国际化? 我是 IntMainJhy,上海某高校大一计算机专业的学生。说起国际化…...

从0到百万级长连接:PHP+Swoole+LLM生产环境落地手册(含TLS双向认证+JWT续期+断线语义恢复)

更多请点击: https://intelliparadigm.com 第一章:PHPSwooleLLM长连接方案对比评测报告全景概览 在构建面向大语言模型(LLM)的实时交互服务时,PHP 传统 FPM 模式已难以满足低延迟、高并发、全双工通信的需求。本章聚焦…...

hocs跨平台适配指南:React Native与Web应用的无缝集成

hocs跨平台适配指南:React Native与Web应用的无缝集成 【免费下载链接】hocs :bento: Higher-Order Components for React 项目地址: https://gitcode.com/gh_mirrors/ho/hocs hocs是一个专注于提供高质量高阶组件(Higher-Order Components&#…...

R 4.5多核加速失效真相(CPU利用率不足42%?深度剖析parallel::mclapply隐式锁竞争)

更多请点击: https://intelliparadigm.com 第一章:R 4.5并行计算性能瓶颈的系统性认知 R 4.5 引入了对并行后端(如 parallel、future 和 clustermq)更严格的资源调度约束,但其底层 C/Fortran 接口在多线程共享内存场景…...

ToMoon:SteamOS 终极网络加速工具,一键配置 TUN 模式提升游戏体验

ToMoon:SteamOS 终极网络加速工具,一键配置 TUN 模式提升游戏体验 ToMoon 是一款专为 SteamOS 定制的网络工具,能够自动配置 TUN 模式加速游戏,实现高效网络代理,为玩家带来更流畅的游戏体验。 🚀 什么是…...

如何为 Hermes Agent 配置 Taotoken 作为自定义模型提供方

如何为 Hermes Agent 配置 Taotoken 作为自定义模型提供方 1. 准备工作 在开始配置前,请确保已安装 Hermes Agent 并拥有有效的 Taotoken API Key。API Key 可在 Taotoken 控制台的「API 密钥」页面生成。同时,建议在模型广场查看当前支持的模型 ID&am…...

万象视界灵坛入门指南:8px硬边投影UI与CLIP零样本识别协同工作原理

万象视界灵坛入门指南:8px硬边投影UI与CLIP零样本识别协同工作原理 1. 平台概览 万象视界灵坛是一款基于OpenAI CLIP模型的高级多模态智能感知平台。它将复杂的视觉识别任务转化为直观的像素风格交互体验,让用户可以像玩游戏一样探索图像与文本之间的语…...

观察 Taotoken 模型广场在项目技术选型阶段提供的便利

观察 Taotoken 模型广场在项目技术选型阶段提供的便利 1. 模型选型中的常见挑战 在项目启动阶段,技术团队往往需要评估多种大语言模型的适用性。传统方式下,工程师需要分别访问不同厂商的官方网站,手动收集模型参数、定价策略和接口文档。这…...

初创公司如何利用 Taotoken 为产品内嵌的 AI agent 功能控制成本

初创公司如何利用 Taotoken 为产品内嵌的 AI agent 功能控制成本 1. 初创团队面临的 AI 成本挑战 在产品中集成 AI agent 功能时,初创团队常面临模型 API 调用成本快速攀升的问题。传统直连单一厂商 API 的方式存在几个典型痛点:无法实时感知 token 消…...

YOLO26-seg分割优化:特征融合创新 | 多层次特征融合(SDI),小目标分割涨点明显| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标分割的识别率 如何引入到YOLO26:1)替代原始的Concat; 《YOLO26-seg魔术师专栏》将从以下各个方向进行创新: 链接: YOLO26-seg魔术师 【原创自研模块】【多组合点优化】【注意力机制】【…...

Token的“双螺旋“结构:AI如何高效理解语言?

文章深入解析了Token在AI中的核心作用,从字节到语义的转换过程。通过BPE算法等手段,Token将文本进行高效压缩,类似乐高组件简化拼装。文章还探讨了Token化在中文与英文中的差异,以及Token如何驱动Transformer模型进行高效计算。最…...

GD32F103VET6替换STM32F103VET6实战:ADC+DMA读取内部温度传感器,从3.7V异常到3.3V正常的排查全记录

GD32与STM32 ADC替换实战:从异常电压到隐蔽引脚配置的深度排查 最近在将STM32F103VET6替换为GD32F103VET6时,遇到了一个令人费解的ADC读取问题——内部温度传感器读数始终显示-400C左右。经过长达两周的排查,最终发现是LIN通信引脚配置影响了…...

KMS_VL_ALL_AIO:5分钟完成Windows和Office智能激活的一站式解决方案

KMS_VL_ALL_AIO:5分钟完成Windows和Office智能激活的一站式解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活烦恼吗?面对Office软件的激活弹…...

BSS段、Data段、Text段的具体含义和数据特性

目录 概述 1 BSS段、Data段、Text段介绍 1.1 对比表格 1.2 各个字段解释 1.2.1 Text段(代码段) 1.2.2 Data段(数据段) 1.2.3 BSS段(未初始化数据段) 2 高级特性与编译器行为 2.1 编译器优化策略…...

独立开发者如何利用 Taotoken 按需调用模型并控制成本

独立开发者如何利用 Taotoken 按需调用模型并控制成本 1. 理解 Taotoken 的成本控制基础 Taotoken 的按 token 计费模式为独立开发者提供了细粒度的成本管理能力。每次 API 调用的费用直接与输入和输出的 token 数量挂钩,这种模式特别适合预算有限但需要频繁实验不…...

Sunshine游戏串流:打造个人云游戏服务器的完整技术指南

Sunshine游戏串流:打造个人云游戏服务器的完整技术指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款开源的游戏串流服务器软件,能够将高性…...

Python 爬虫分布式架构基础与多机协同采集方案

前言随着爬取目标站点规模扩大、反爬策略升级、数据量级指数级增长,单机单线程、单机多线程爬虫会天然遇到三大瓶颈:IP 限制、采集效率不足、单机性能上限。普通并发爬虫受限于单机 CPU、带宽、IP 池,面对海量站点与高频采集需求时&#xff0…...

Python 爬虫数据处理:半结构化网页数据智能抽取模板

前言 在互联网数据采集场景中,严格遵循 XML、JSON 规范的全结构化数据占比相对有限,绝大多数公开网页内容均以半结构化形态呈现。半结构化数据区别于规整的数据库表格、标准接口 JSON 数据,具备固定排版逻辑、重复标签层级、统一内容排布规律…...

LiuJuan20260223Zimage一文详解:Z-Image基座模型特性、Lora适配原理与部署注意事项

LiuJuan20260223Zimage一文详解:Z-Image基座模型特性、Lora适配原理与部署注意事项 今天我们来聊聊一个挺有意思的AI绘画模型——LiuJuan20260223Zimage。你可能已经听说过Stable Diffusion,也用过一些在线AI绘画工具,但这个模型有点特别。它…...

nli-MiniLM2-L6-H768开发者案例:知识图谱三元组验证的轻量推理方案

nli-MiniLM2-L6-H768开发者案例:知识图谱三元组验证的轻量推理方案 1. 模型概述 nli-MiniLM2-L6-H768是一款专为自然语言推理(NLI)与零样本分类设计的轻量级交叉编码器(Cross-Encoder)模型。它在保持接近BERT-base精度的同时,通过精巧的架构设计实现了…...

Qwen2.5为何难部署?显存与依赖版本避坑指南

Qwen2.5为何难部署?显存与依赖版本避坑指南 通义千问2.5-7B-Instruct大型语言模型 二次开发构建by113小贝 1. 引言:Qwen2.5的部署挑战 Qwen2.5作为通义千问系列的最新版本,在知识量、编程能力和数学推理方面都有显著提升,支持超过…...

基于MCP协议实现AI与Notion自动化集成:原理、部署与实战

1. 项目概述:当Notion遇上AI,一个工具如何打通你的知识工作流 如果你和我一样,每天的工作都离不开Notion,用它来管理项目、记录灵感、整理文档,那你一定也想过:要是能让AI助手(比如Claude、Cur…...

基于本体与技能增强Claude:构建领域专家AI的工程实践

1. 项目概述:一个为Claude设计的技能与本体知识库最近在折腾AI应用开发,特别是围绕Claude API做深度集成时,发现一个挺有意思的痛点:虽然Claude本身能力很强,但如果你想让它在一个特定领域(比如医疗咨询、法…...

【限时开源】Swoole-LLM-Connector v2.3:内置Token流控、上下文压缩、断线续问的私有化长连接SDK(GitHub Star破1.2k前最后更新)

更多请点击: https://intelliparadigm.com 第一章:Swoole-LLM长连接架构全景概览 Swoole-LLM 是一种面向大语言模型服务的高性能长连接架构,它将 Swoole 的协程网络能力与 LLM 推理生命周期深度耦合,实现毫秒级请求响应、上下文保…...

5分钟快速上手:RuoYi-Vue3-FastAPI 企业级中后台管理系统完整指南

5分钟快速上手:RuoYi-Vue3-FastAPI 企业级中后台管理系统完整指南 【免费下载链接】RuoYi-Vue3-FastAPI 基于Vue3Element PlusFastAPI开发的一个通用中后台管理框架(若依的FastAPI版本),支持代码生成。A general middle and backe…...

NVIDIA NeMo荷兰语与波斯语语音识别模型技术解析

1. NVIDIA NeMo 发布荷兰语与波斯语语音识别模型:技术解析与应用实践作为一名长期关注语音技术发展的从业者,我亲历了从传统GMM-HMM到端到端深度学习的演进过程。当看到NVIDIA NeMo团队针对荷兰语和波斯语这类资源较少语言推出专用ASR模型时,…...

ComfyUI-AnimateDiff-Evolved完整指南:从零开始掌握AI动画生成

ComfyUI-AnimateDiff-Evolved完整指南:从零开始掌握AI动画生成 【免费下载链接】ComfyUI-AnimateDiff-Evolved Improved AnimateDiff for ComfyUI and Advanced Sampling Support 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-AnimateDiff-Evolved …...

为 Hermes Agent 配置自定义供应商并接入 Taotoken 平台的多模型服务

为 Hermes Agent 配置自定义供应商并接入 Taotoken 平台的多模型服务 1. 准备工作 在开始配置之前,请确保您已安装 Hermes Agent 工具并拥有有效的 Taotoken API Key。您可以在 Taotoken 控制台的「API 密钥」页面创建新的密钥。同时,建议在模型广场查…...

告别网盘限速困扰:LinkSwift直链下载助手完全指南

告别网盘限速困扰:LinkSwift直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

xbatis:强大 ORM 框架,多版本更新亮点多,多种查询写法超方便!

推荐理由xbatis 强大之处显著,单表、连表操作均可,能让开发者少写 1/3 甚至 2/3 的持久层代码。其 API 简单、快捷、优雅、简洁,构建 SQL 能力强。即便有了 AI,好用的 ORM 仍不可忽视,除非后续不维护。各版本更新内容1…...