A
Air官方
国际化(i18n)与本地化(l10n)的坑不只在翻译:格式、时区、排序、编码这些环境假设,在鸿蒙上都有差异。这篇讲兜底策略。
▍locale 体系是什么
locale 决定数字格式(小数点、千分位)、日期时间格式、货币、字符排序、大小写规则。C 与 CPlusPlus 的 locale 体系在 musl 上的数据集比 glibc 精简:glibc 环境编出的代码假设的 locale 行为,musl 上可能缺失或不同。典型症状:日期显示格式不对、数字分组消失、字符串排序变化。
▍三类兜底
一,数据自带:应用需要的 locale 数据(格式模板、翻译)随包分发,不依赖系统提供——最可控,格式类应用(表格、统计)建议这么做。二,初始化固定:启动时显式设置 locale 环境(C 或指定值),让行为可预测,避免跟随系统漂移出测试外组合。三,逐点替换:对行为差异敏感的点(排序、格式化)用自带实现替换系统调用。
▍时区与时间
时区数据库:musl 环境的时区数据可能与预期不同,日历类应用自带时区数据更稳。时间戳精度与单调钟:性能计时用单调钟,业务时间用墙钟,别混。夏令时:跨时区应用的日期计算要用完整时区规则库。
▍编码纪律
全链路 UTF-8 是底线:文件 IO、网络、进程间通信统一;从外部(剪贴板、文件)进来的数据要做编码探测与转换的容错(坏字节不崩,替换字符顶替)。文件名编码:跨平台交换的压缩包,文件名编码差异是中文文件名乱码的高发地,解包侧要按规则处理。
▍验收
中文环境全功能走查加一个英文环境对照(发现硬编码中文混进界面的好办法);数字日期格式抽查;跨时区场景(修改系统时区)行为正确;含特殊字符文件名的打开保存。
▍建议
把 locale 相关的环境设置集中在启动最早期(与字体配置同一段),这两类环境缓存的教训是一样的:设置晚了不生效。
免费无广告的安装包可以在官网下载体验。
▍locale 体系是什么
locale 决定数字格式(小数点、千分位)、日期时间格式、货币、字符排序、大小写规则。C 与 CPlusPlus 的 locale 体系在 musl 上的数据集比 glibc 精简:glibc 环境编出的代码假设的 locale 行为,musl 上可能缺失或不同。典型症状:日期显示格式不对、数字分组消失、字符串排序变化。
▍三类兜底
一,数据自带:应用需要的 locale 数据(格式模板、翻译)随包分发,不依赖系统提供——最可控,格式类应用(表格、统计)建议这么做。二,初始化固定:启动时显式设置 locale 环境(C 或指定值),让行为可预测,避免跟随系统漂移出测试外组合。三,逐点替换:对行为差异敏感的点(排序、格式化)用自带实现替换系统调用。
▍时区与时间
时区数据库:musl 环境的时区数据可能与预期不同,日历类应用自带时区数据更稳。时间戳精度与单调钟:性能计时用单调钟,业务时间用墙钟,别混。夏令时:跨时区应用的日期计算要用完整时区规则库。
▍编码纪律
全链路 UTF-8 是底线:文件 IO、网络、进程间通信统一;从外部(剪贴板、文件)进来的数据要做编码探测与转换的容错(坏字节不崩,替换字符顶替)。文件名编码:跨平台交换的压缩包,文件名编码差异是中文文件名乱码的高发地,解包侧要按规则处理。
▍验收
中文环境全功能走查加一个英文环境对照(发现硬编码中文混进界面的好办法);数字日期格式抽查;跨时区场景(修改系统时区)行为正确;含特殊字符文件名的打开保存。
▍建议
把 locale 相关的环境设置集中在启动最早期(与字体配置同一段),这两类环境缓存的教训是一样的:设置晚了不生效。
免费无广告的安装包可以在官网下载体验。
楼主
7 天前