ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

国际食谱 - 度量衡本地化 —鸿蒙实战

国际食谱 - 度量衡本地化 —鸿蒙实战 一、场景痛点度量衡是国际化的「隐性差异」文案没翻译用户能看出来但单位不对用户往往说不清哪里不对只会觉得这 App 不对劲。美国用户看到「250 克 无盐黄油」知道是黄油但完全无法估计 250 克是多少——他脑子里的单位是杯cup和盎司oz中国用户看到「375°F」烤曲奇温度直觉完全失效375 是华氏对应的摄氏是 190同一条数据在不同地区用户眼里数值含义完全不同体重 150磅还是斤、距离 5公里还是英里、包裹 2公斤还是磅。更隐蔽的是单位名称本身也有文化差异同一个 litre法国写litres、英国写liters中文的「公斤」与「千克」并存日本用「合」180ml计量米、用「坪」计量面积——这些都不是简单的英制 vs 公制二分法能覆盖的。本应用以「国际食谱」为载体把度量衡本地化从技术细节提升为产品体验。二、典型用户故事故事 A留美学生小陈zh_CN → en_US小陈在美国跟朋友学做曲奇朋友的食谱写「8.8 oz unsalted butter」她习惯「250 克」。她切到英文界面食材名变成英文、用量变成盎司——但注意她并不需要换算她需要的是用自己熟悉的体系读懂对方的食谱。反过来她把界面留在中文英文食谱自动显示成克/毫升她照做就行。故事 B法国用户 Mariefr_FRMarie 打开食谱看到「250 grammes de beurre non salé」。她可能没意识到这个grammes复数 法语拼写不是翻译软件翻出来的而是 CLDR 数据按法语复数规则生成的。如果开发者在代码里写死250 gramsMarie 会看到英文式复数——细节决定本地化还是半吊子翻译。故事 C英国用户 Oliveren_US 近似Oliver 看烤箱温度卡默认看到 175°C。他点选 200°C下方显示 392°F——英国家庭烤箱刻度同时印着两种单位。这个卡片解决了他最日常的困惑网上找的食谱温度单位总跟自己烤箱不一样。故事 D跨境食谱作者 AliceAlice 在博客发布曲奇食谱读者遍布全球。她用这个工具验证同一个食谱在 5 种语言、公制/英制下的呈现确认「经典曲奇」在美国读者眼中不是250克黄油而是8.8 oz 黄油——一篇文章全球可读。故事 E日本用户 Yukija_JPYuki 是日式点心师傅。他看英文食谱时最头疼的不是语言而是「1 cup flour」——日本菜谱习惯用「カップ180ml」「大さじ15ml」这类烹饪专用单位而美国菜谱的「1 cup」是 236.6ml日本家庭常备的量杯却按 200ml 刻度。他切到日语界面后用量以克/毫升显示立即避开「一杯」在不同国家体积不同的陷阱。这印证了本应用的设计理念单位换算不是转换数值而是转换度量语义。故事 F回归测试工程师 LeoLeo 的测试矩阵里有一列必查项zh_CN / zh_TW / en_US / ja_JP / fr_FR 五种语言 × long/short/narrow 三档 × 公制/英制两体系共 30 种组合每个组合检查 5 条食材、2 个示例、2 个温度结果。他最喜欢本页的「单位显示方式」区块——把三档并排展示他不用翻设置就能一次性核对三种形态是否正确。三、适用使用环境环境类型适配说明食谱/烹饪类 App容量与重量单位随地区切换温度换算内嵌天气 App温度按 locale 摄氏/华氏美版 68°F、中版 20°C健身/健康 App体重磅/千克、跑步距离英里/公里、卡路里格式地图/导航 App距离单位随地区美国英里、欧洲公里物流/快递/电商包裹重量磅/千克、体积单位、报关单换算工程/科学工具通用单位换算器长度/面积/速度/压力全覆盖单位体系的全球版图为什么不是简单二分很多人以为世界只分公制/英制实际是一个光谱地区官方/习惯体系典型例子中国、欧洲大陆、日本公制为主克、升、摄氏、公里美国英制为主法定但未强制公制化磅、盎司、华氏、英里英国混合重量用公斤、距离用英里、液体用品脱利比里亚、缅甸英制/本地单位磅、缅斤viss全球烹饪圈混杂美国杯、日本合、中国两、英国品脱美国曾在 1975 年通过《公制转换法案》但从未强制执行所以至今磅/盎司/华氏仍是主流英国 1970 年代推行公制后距离仍用英里是著名的半公制案例。做国际化产品不能假设跟着 locale 走就对——en_US是英制、en_GB却混合、ja_JP公制但菜谱用合/大さじ。这也是本应用用显式system字段而非按国家代码推断的原因。四、目标用户画像跨地区生活的用户留学、外派、跨境家庭一个用户同时接触两套单位体系面向全球发行的产品团队需要把单位本地化做进产品而不是留给用户自己换算内容创作者食谱、健身教程、DIY 指南作者一份内容希望多地区读者无障碍阅读开发测试人员回归验证 locale 切换下单位格式、复数、精度是否全部正确。五、关键设计决策1. 存储用 SI 基准单位展示层换算INGREDIENTS表存「250 克、240 毫升」等公制基准值英制显示时才除以系数。理由数据只有一份展示可以有无数种。若按地区存多份数据新增一个地区就要改数据存基准值后加语言只加映射数据零改动。2. 默认单位跟随 locale允许用户手动覆盖美国用户默认英制、欧洲用户默认公制——但默认不等于强制。真实产品如天气 App都会提供「°C/°F」手动切换且用户的手动选择要单独持久化不能被下一次 locale 变化覆盖StorageLink(STORAGE_LOCALE)currentLocale:stringDEFAULT_LOCALE;// 用户手动覆盖的单位偏好应存另一个 key如 i18n_series_09_unit_override3. 换算率与显示完全分层toImperial()只做数学250 ÷ 28.35 8.82fmtUnit()只做呈现“8.8 oz”。换汇率更新比如精度更高的系数不会影响显示逻辑改显示风格long→short不会碰换算——两层各自可独立测试// 换算层纯函数可单测expect(toImperial(28.35,gram)).toBeCloseTo(1,5);// 格式化层可单测expect(fmtUnit(fr_FR,250,gram,long)).toBe(250 grammes);4. 单位显示粒度可调三档同一数值在「句子」「标签」「图表刻度」三种场景需要三种形态。三档设计让一个组件通吃全文/表单/图表避免每个场景各写一套格式代码。5. 单位体系的显性化设计本应用在语言徽章下方常驻一行公制 / 英制: 英制指示条——把隐藏在 locale 背后的单位体系选择明示给用户。这是场景设计的细节用户切到英文发现数值从 250 克变成 8.8 oz如果没有这行提示他会以为是 bug有了它用户立刻理解哦英文界面默认英制。真实产品里同样的手法用于时区“当前时区UTC8”、币种“计价货币USD”把隐含规则变成可见信息是降低国际化产品困惑度的通用技巧。六、边界与降级温度非线性cToF()×9/532与线性换算×系数分开处理绝不能混入统一 rate 表——否则 175°C 会算出 315°F 而非 347°F不支持的单位代码fmtUnit()内try/catch非法 unit 回退「纯数字 单位代码」如8.8 ounce保证 UI 不空白不崩溃未知 localecurCfg()用?? LANGS[0]兜底找不到配置时按默认语言渲染精度控制maximumFractionDigits: 1统一一位小数避免8.81849...这种浮点尾差直接暴露给用户换算内部不做舍入舍入只发生在显示层用户覆盖 vs 系统默认手动选过的单位偏好与 locale 默认分开存储、分开生效切换语言不清空用户偏好。七、竞品对比同类方案取舍方案优点缺点本应用选择手写单位字符串 条件判断简单直接每种语言 × 每种单位 × 每种档位都要写死组合爆炸❌Intl style:unit本应用CLDR 数据驱动复数/空格/拼写全自动依赖系统 CLDR 数据版本✅自建单位数据库ICU4X 等数据可控、离线一致引入依赖、体积大扩展方向服务端下发单位文案可热更新依赖网络离线不可用扩展方向关键认知「8.8 oz」不是翻译出来的是格式化出来的。把它当翻译文案管理每种语言存一条很快会撞上复数ounce/ounces、拼写gramme/gram、空格8.8oz/8.8 oz/8.8 oz的组合爆炸——交给 CLDR 数据才是正解。八、扩展方向更多单位维度面积平方米/平方英尺、速度km/h ↔ mph、压力hPa ↔ inHg、体感温度含湿度因子本地特殊单位日本的合/坪、英制的杯/汤匙体积烹饪单位、中国的斤/两——CLDR 已覆盖多数直接换unit代码即可单位偏好跨设备同步登录后单位偏好存云端手机/平板/手表一致语音播报本地化TTS 朗读「250 grammes」时用 long 档朗读需要完整单位名narrow 档的 “250g” 会被读成 “250g”自动识别用户体系不只看 locale还结合系统地区、SIM 卡地区、GPS 位置综合推断如常驻美国的中国用户看到英里但想切公里烹饪专用单位体系cup/tablespoon/teaspoon在美制236.6ml/14.8ml/4.9ml、英制284.1ml/17.8ml/5.9ml、日式200ml 量杯之间差异巨大食谱类产品可在单位选单里提供杯 美制/英制/日式三选一把隐性歧义显性化。九、生产级注意事项换算率带版本若换算率从服务端下发务必带版本号并本地缓存避免数据源更新导致新旧客户端显示不一致CLDR 数据版本差异不同系统版本 CLDR 数据可能不同如旧系统没有fluid-ounce上线前在目标最低系统版本上跑一遍全部unit代码的冒烟测试精度策略分级天气 0 位小数20°C、健身 1 位68.0 kg、工程 2 位0.24 L——按场景定义精度不要全局一刀切方向性阿拉伯语下数字与单位同样需要 RTL 排布见应用 07格式化结果直接放进 RTL 布局即可但拼接「名称 数值」时注意语序可访问性给朗读器提供 long 档单位名——屏幕阅读器读 “250g” 会念成 “250g”字母读 “250 grams” 才自然。十、结语度量衡本地化让「数据」在跨文化使用时依然有准确含义。它是天气、健康、物流、地图类产品国际化不可跳过的一环——用户可能容忍界面翻译不完美但绝不会容忍自己的体重显示单位是错的。本应用用「国际食谱」这个最小闭环把「存基准值、按体系换算、用 Intl 呈现」的完整链路跑通数据只有一份呈现却有 5 种语言 × 3 种档位 × 公制英制 2 种体系——这就是本地化的杠杆效应。
返回列表