localstorage 存本地化数据需结构化、版本化、分层管理:用命名空间前缀避免冲突,json 序列化嵌套对象并校验结构,内置 version/updated/fallback 元信息支持演进,区分持久态(用户偏好)与临时态(页面覆盖、草稿),敏感项加 ttl。

localStorage 本身只存字符串,但本地化数据(比如多语言文案、区域偏好、时区格式)往往结构复杂、需版本兼容、有生命周期,直接 flat 存 key-value 容易混乱。设计时得兼顾可读性、可维护性和向后兼容。
命名空间化 + 区域标识前缀
避免用 lang 或 locale 这类通用键名,容易被其他脚本覆盖或误删。应带上应用标识和区域维度:
- 推荐格式:
myapp_v2_locale_zh-CN、dashboard_i18n_en-US_dateFormat - 若支持动态语言切换,可按语言+版本分组:
myapp_i18n_v3_zh-Hans、myapp_i18n_v3_ja-JP - 对区域敏感配置(如货币符号、小数位),建议拆成独立键:
myapp_region_US_currency、myapp_region_JP_numberFormat
结构化值必须 JSON 序列化 + 类型防护
本地化数据通常是嵌套对象(如 {"button": {"save": "保存", "cancel": "取消"}}),不能裸存,否则读取后 typeof 是 string,无法直接用。
- 写入前统一
JSON.stringify(),读取后JSON.parse()并校验结构完整性 - 建议封装工具函数,自动 fallback 到默认语言包(如 en-US)或空对象,避免因解析失败导致 UI 崩溃
- 不建议存函数、正则、undefined 或循环引用——这些 JSON 不支持,序列化会丢或报错
嵌入元信息支持演进与降级
本地化文案常随产品迭代更新,旧版文案可能字段缺失、结构变更。靠人工清理不可靠,应在数据中内置可识别的元字段:
- 每个 locale 数据加
__version: "v3.2"和__updated: 1719152400000(时间戳) - 加载时检查 version,若低于当前要求版本,触发迁移逻辑(例如补全缺失字段、重映射 key 名)
- 可预留
__fallbackTo: "en-US"字段,当某语言缺失某条目时,自动回退到指定语言
区分持久态与临时态,避免污染长期存储
不是所有本地化相关数据都该进 localStorage。要按语义分层:
-
持久态:用户手动选择的语言、地区偏好(
myapp_userLocale)、自定义翻译开关,适合长期保留 - 临时态:页面级语言覆盖、A/B 测试分组、未确认的草稿翻译,建议用 sessionStorage 或内存缓存,关页即清
- 敏感或高频变动项(如实时翻译缓存)可加 TTL,读取时校验
__expires时间戳,过期自动丢弃并重新拉取











