国际食谱 - 度量衡本地化 — ArkTS页面设计

发布时间:2026/10/30 13:02:13

国际食谱 - 度量衡本地化 — ArkTS页面设计 一、设计目标把「单位换算 本地化呈现」做成一个直观的食谱工具选语言、看食材用量自动变成当地单位体系、调单位显示档位、换算烤箱温度结果即时呈现。UI 设计要回答三个问题同一份食谱如何在 5 种语言下都读得懂法文用户看到的是250 grammes而不是250 克英文用户看到的是8.8 oz而不是250 克——食材名称与用量单位要跟随语言与地区体系同步变化公制与英制的差异要可视化美国用户习惯磅/盎司/华氏欧洲用户习惯克/升/摄氏。同一个数值250 克在两种体系下含义相同、写法迥异UI 必须让这种差异看得见单位显示粒度要可控正式文本用全称100 kilograms、界面标签用缩写100 kg、图表刻度用极窄形式100kg——三档显示方式应在一个界面上即时切换对比。因此本页 UI 的核心原则是数值与单位永远通过格式化函数生成UI 只负责展示不手写任何克磅字符串。这也是本系列 14 个应用共同遵循的 UI 戒律在本页的体现——只不过本页的语言维度被替换成了度量衡体系维度。二、页面信息架构组件树UnitConvertPageEntry 根组件 └─ Scroll整页滚动背景 #F8FAFC └─ Column宽 100% ├─ Row标题栏国际食谱 副标题 图标 ├─ Flex语言徽章组5 种 locale选中橙色高亮 ├─ Text公制/英制体系指示条 ├─ Text ForEach食材清单经典曲奇 · 食材清单 │ └─ 每行 Row食材名左 用量右橙色加粗 ├─ Text Row单位显示方式long/short/narrow 三档徽章 │ └─ Row×2重量示例 250g / 容量示例 0.24L └─ Text Column烤箱温度换算卡5 档摄氏徽章 摄氏⟷华氏 └─ 橙色卡片 #FFF7ED底部留白与普通换算器输入数字 → 选单位 → 出结果不同本页把换算隐藏在真实食谱语境里用户不是在操作一个抽象的换算器而是在看一份用自己熟悉的单位体系显示的食谱。交互载体从公式变成食材理解门槛大幅降低。三、色彩与字号规范背景#F8FAFC浅灰蓝卡片纯白强调色为橙色系——烘焙/厨房场景的温暖感同时与系列其他应用的蓝色主调形成区分元素色值字号字重页面标题#1F293722Bold副标题#9CA3AF12Normal区块标题食材/单位/温度#1F293714Bold食材名称#1F293714Normal食材用量#C2410C14Bold选中徽章文字 #FFFFFF / 底 #C2410C11~12Normal未选中徽章文字 #374151 / 底 #E5E7EB11~12Normal体系指示条#C2410C12Normal温度结果摄氏#C2410C18Bold温度结果华氏#1F293718Bold温度换算卡背景#FFF7ED——色彩规则三类选择器语言/档位/温度全部复用同一组橙 选中、灰 未选中语义用户只需学一次交互模式但语言徽章带 flag emoji 前缀、温度徽章带 °C 后缀用内容区分维度避免同色混淆。四、语言徽章组体系随语言切换语言徽章是本页的总开关——切换语言不仅换文案还换整套度量衡体系Flex({wrap:FlexWrap.Wrap,justifyContent:FlexAlign.Start}){ForEach(LANGS,(l:LangCfg){Text(${l.flag}${l.name}).fontSize(12).padding({left:10,right:10,top:6,bottom:6}).borderRadius(16).backgroundColor(this.currentLocalel.code?#C2410C:#E5E7EB).fontColor(this.currentLocalel.code?Color.White:#374151).onClick((){this.currentLocalel.code;})},(l:LangCfg)l.code)}.width(94%).margin({top:10})设计要点FlexWrap 自动换行5 个语言徽章在窄屏360dp上自动折行成两排无需人工控制换行位置flag emoji 母语名国旗让用户一眼定位自己的语言母语名保证识别准确简体中文显示简体中文而不是Simplified Chinese点击即切换currentLocale是StorageLink赋值瞬间全页所有食材用量、单位显示、温度换算全部按新体系重算——不用点确定按钮ForEach key 用l.code稳定唯一语言列表顺序调整时不会重建多余节点。五、体系指示条让差异看得见语言徽章下方有一条橙色指示直接点明当前地区采用哪种单位体系Text(${this.T(K.metric)}/${this.T(K.imperial)}:${this.isImperial()?this.T(K.imperial):this.T(K.metric)}).fontSize(12).fontColor(#C2410C).width(94%).margin({top:8})isImperial()由当前 locale 决定privateisImperial():boolean{returnthis.curCfg().systemimperial;}即en_US → 英制imperial其余 → 公制metric“。这行文字是 i18n UI 的经典细节把隐含规则显性化——用户切到英文后看到Unit system: Imperial提示立刻理解为什么 250 克变成了 8.8 oz而不是困惑于数值怎么变了”。六、食材清单名称与单位双通道本地化食材清单是双语双体系最复杂的区块——食材名称跟语言走用量单位跟体系走ForEach(INGREDIENTS,(i:Ingredient){Row(){Text(this.nameOf(i)).fontSize(14).fontColor(#1F2937).layoutWeight(1)Text(this.amountOf(i)).fontSize(14).fontWeight(FontWeight.Bold).fontColor(#C2410C)}.width(94%).padding({left:14,right:14,top:10,bottom:10}).backgroundColor(Color.White).borderRadius(10).margin({top:6})},(i:Ingredient)i.id)两个取数函数各司其职// 名称英制体系显示英文名否则显示中文名privatenameOf(i:Ingredient):string{returnthis.isImperial()?i.nameEn:i.nameZh;}// 用量公制显示 g/l英制换算后显示 oz/fl ozprivateamountOf(i:Ingredient):string{constdisplaythis.displayNames()[this.displayIdx];if(this.isImperial()){constvtoImperial(i.metric,i.unit);constuniti.unitgram?ounce:fluid-ounce;returnfmtUnit(this.currentLocale,v,unit,display);}constuniti.unitgram?gram:liter;constvi.unitmilliliter?i.metric/1000:i.metric;returnfmtUnit(this.currentLocale,v,unit,display);}设计细节左名称右用量名称layoutWeight(1)弹性占位用量固定在右侧——多语言下名称长度差异“无盐黄油” vs “unsalted butter” vs “バター無塩”不会挤乱右侧数值用量橙色加粗数值是本页视觉终点用户扫一眼就能拿到放多少单位换算集中处理toImperial()里克→盎司÷28.35、毫升→液量盎司÷29.5735毫升在公制下除以 1000 转升——换算逻辑与 UI 完全解耦卡片圆角 10、间距 6与全系列卡片语言一致节奏统一。七、单位显示方式三档即时对比unitDisplay是Intl.NumberFormat的展示粒度参数本页把三档做成三个可点击徽章实时展示同一数值的三种写法Row({space:6}){ForEach(this.displayNames(),(d:string,idx:number){Text(d).fontSize(11).padding({left:8,right:8,top:4,bottom:4}).borderRadius(10).backgroundColor(this.displayIdxidx?#C2410C:#E5E7EB).fontColor(this.displayIdxidx?Color.White:#374151).onClick((){this.displayIdxidx;})},(d:string)d)}.width(94%).margin({top:6})三档对照示例英文、250 克档位重量容量适用场景long250 grams0.24 liters正式文本、朗读场景short250 g0.24 L界面标签默认narrow250g0.24L图表刻度、极窄空间下方两行示例重量:250 gram、容量:0.24 liter随档位与语言即时重渲染——用户在一个屏幕上同时看到三档差异比文档讲解直观得多。这是教学型 UI的典型手法把抽象参数变成可交互的演示控件。八、烤箱温度换算卡非线性换算的视觉化温度是唯一非线性的换算×9/532UI 用一张独立卡片承载Text(this.T(K.oven)).fontSize(14).fontWeight(FontWeight.Bold).width(94%).margin({top:14})Column(){Row({space:6}){ForEach(TEMPS,(c:number,idx:number){Text(${c}°C).fontSize(12).padding({left:10,right:10,top:6,bottom:6}).borderRadius(14).backgroundColor(this.tempIdxidx?#C2410C:#E5E7EB).fontColor(this.tempIdxidx?Color.White:#374151).onClick((){this.tempIdxidx;})},(c:number,idx:number)${idx}-${c})}.width(100%).justifyContent(FlexAlign.Start)Row({space:10}){Text(this.fmtC()).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#C2410C)Text(⟷).fontSize(16).fontColor(#9CA3AF)Text(this.fmtF()).fontSize(18).fontWeight(FontWeight.Bold).fontColor(#1F2937)}.width(100%).margin({top:10}).justifyContent(FlexAlign.Start)}.width(94%).padding(14).backgroundColor(#FFF7ED).borderRadius(14).margin({top:8,bottom:16})设计要点5 档烘焙常用温度160/175/190/200/220°C每档是真实场景低温慢烤/曲奇/面包/烤肉/酥皮不是随机数字摄氏橙、华氏深灰左侧当前体系用强调色右侧换算结果用次级色——视觉主次与语义主次一致⟷双向箭头暗示换算可逆比→更准确卡片底色 #FFF7ED暖橙浅底与白色页面区分形成换算结果区的视觉容器感同时呼应烘焙主题ForEach key 用${idx}-${c}数值可能重复的场景如两个 160也能保证 key 唯一。九、排版验证清单多语言下自查检查项方法验证结果食材名长度差异名称layoutWeight(1) 右侧数值固定日文バター無塩不挤乱右侧用量单位随体系变化amountOf()按isImperial()分支换算en_US 下 250 克 → 8.8 oz三档显示对比displayIdx切换即时重算long/short/narrow 三态清晰温度换算正确cToF()单独处理非线性175°C → 347°F非 307单位名称随语言fmtUnit()用style:unitfr_FR 显示 “grammes” 而非 “grams”窄屏不溢出徽章组 FlexWrap 自动折行360dp 下语言徽章折成两排语言持久化重启保持上次 localePersistentStorage.persistProp生效十、可访问性多语言 UI 加分项不靠颜色单通道传义选中态 橙色底 白色字 语言徽章带 flag三重编码色弱用户仍可辨识步进/选择目标足够大徽章 padding 上下 6dp可点击区域 ≥ 44dp 触控建议的边沿水平对比度达标正文 #1F2937 on 白色 ≈ 15:1次文字 #9CA3AF on #F8FAFC ≈ 4.6:1橙色 #C2410C on 白 ≈ 4.5:1均满足 WCAG AA不依赖 emoji 传义、 仅是装饰/辅助删除后文字信息完整单位显示可切换narrow 档位下数字与单位无空格250g视力障碍朗读器可切换到 long 档获取完整单位名——三档设计本身就是一个无障碍开关。十一、小结本页 UI 的全部工作可以概括为一句话用食谱这个真实语境把公制/英制差异、unitDisplay 三档、温度换算三个 i18n 知识点串成一个零学习成本的交互。语言徽章管体系、档位徽章管粒度、温度卡管特例三组选择器共用一套交互语义橙选中加上体系指示条把隐含规则显性化——这套设计模式可直接迁移到任何数值 单位 多地区的业务页面天气、健身、物流、工程换算。下一篇文章将深入技术实现讲解Intl.NumberFormat style:unit的 CLDR 数据驱动机制与换算层的分层设计。
延伸阅读

更多相关文章

2026/10/25 14:30:44

涂鸦T2-U开发板实战:基于TuyaOS快速构建物联网环境监测终端

1. 项目概述:为什么说T2-U是IoT开发的“快车道”?最近在捣鼓一个智能家居的小项目,想给家里的老式加湿器加个远程控制和定时功能。按照我过去的习惯,要么是选个ESP8266/ESP32自己从头写固件、画板子,要么就是找现成的模…

2026/10/25 14:17:17

字符串反转算法:5种解法与面试实战技巧

1. 反转字符串问题解析作为程序员面试必考题型,字符串反转看似简单却暗藏玄机。我在准备谷歌面试时曾在这个基础题型上栽过跟头,后来系统总结了5种主流解法及其适用场景。今天就把这些实战经验分享给大家,帮你避开我踩过的坑。字符串反转问题…

2026/10/28 5:37:25

互联网大厂招聘趋势与求职策略分析

1. 行业现状:大厂招聘季的变迁观察最近两年,一个明显的趋势正在职场圈蔓延——曾经被应届生和职场新人视为"黄金跳板"的互联网大厂招聘季,正在经历着前所未有的结构性变化。作为经历过三次完整招聘周期的从业者,我亲眼目…

2026/10/30 12:58:56

CentOS 7.9部署Zabbix 6.0全流程指南:避开PHP与数据库版本坑

简介:面向CentOS 7.9运维环境,这份Zabbix 6.0 LTS部署文档适合需要搭建自建监控平台的系统管理员、运维工程师和入门学习者。全文以源码方式给出Zabbix Server与Agent 6.0.12的完整安装流程,并串联Nginx 1.20.2、PHP 7.4.30、MySQL 8.0.28等核…

2026/10/30 12:58:56

OpenCV 4.5.1 预编译包正确集成与避坑指南

简介:本资源为 OpenCV 4.5.1 版本预编译完成的开发包,面向计算机视觉初学者、嵌入式/桌面端快速原型开发者及不熟悉 C 构建流程的算法工程师,旨在解决 OpenCV 源码编译耗时长、依赖复杂、CMake 配置易出错等典型痛点。压缩包为 7z 格式&#…

2026/10/30 12:58:56

C# Modbus TCP读写汇川PLC寄存器实战指南

简介:本资源是一套基于C#实现Modbus TCP协议与汇川PLC通信的完整开发示例,面向工业自动化领域的.NET开发者、PLC上位机工程师及工控系统集成学习者,解决现场设备数据采集、远程监控与协议调试等实际问题。压缩包共148个文件,涵盖9…

2026/10/30 12:58:56

three.js三维图表特效源码解析:从渲染链路到性能优化

简介:这是一份面向Web前端开发者与数据可视化学习者的Three.js三维图形图表特效源码包,适合具备一定JavaScript基础、希望将二维图表升级为立体交互效果的进阶练习者。压缩包共9个文件,约500KB,以7个js脚本为核心,搭配…

2026/10/30 12:58:56

pdf2doc.exe在Win10/Win11的安装配置与闪退排查指南

简介:面向需要在 Windows 上把 PDF 批量转成 Word 的办公人群,这是一份基于 Python 自行整合打包的转换工具,解压后直接运行 pdf2doc.exe 即可使用,免安装、无广告,支持单个文件、多文件以及整个文件夹的批量转换。压缩…

2026/10/30 12:53:56

.NET企业门户完整版:RBAC权限驱动的可上线系统骨架

简介:本资源是一套基于.NET技术构建的企业级门户网站完整实现方案,面向.NET初学者、Web开发工程师及企业信息化建设人员,解决企业对外形象展示、内容管理与用户权限管控等核心需求。压缩包共211个文件,涵盖38个C#后端逻辑文件&…

2026/10/29 17:05:52

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/29 17:06:02

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/29 17:06:13

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/30 0:00:46

NCP1342高频准谐振反激控制器:从设计约束到验收的完整方案

简介:NCP1342 高频准谐振反激控制器应用介绍译文文档,面向电源设计工程师、硬件研发人员及开关电源学习者,帮助读者跨越英文原版资料的语言门槛,系统理解这款高集成度 QR Flyback 控制器的设计要点。文档围绕芯片核心特性展开&…

2026/10/30 0:00:46

NCP1342准谐振反激电源设计:从选型到验收的全流程解析

简介:这份文档面向电源设计工程师与开关电源学习者,系统梳理NCP1342高频准谐振反激控制器的应用要点,帮助读者快速理解这款高集成度离线电源变换器控制芯片的工作机制与设计方法。内容涵盖芯片核心特性、引脚功能定义、电气特性参数表、最大额…

2026/10/30 0:00:46

Web系统自动登出机制设计与实现全解析

1. 系统自动登出机制的设计初衷在各类Web应用和后台管理系统中,自动登出功能早已成为标配。这个看似简单的功能背后,实际上涉及用户安全、资源管理和体验优化的多重考量。作为从业十多年的老开发,我见过太多因为登出逻辑设计不当导致的安全事…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑