柯里化处理国际化文本拼接的核心是固化语言环境与资源对象,通过 createt(lang, resources) 工厂函数生成只接收 key 和 options 的 t 函数,支持插值、fallback 降级及响应式联动。

用柯里化处理国际化文本拼接,核心是把“语言环境 + 翻译函数”提前固化,让后续调用只需传入 key 和变量,既避免重复判断 locale,又防止漏传参数或错用语言包。
先固定语言环境和资源对象
柯里化的起点不是翻译函数本身,而是语言标识和对应 JSON 包的绑定。比如你有 zh.json 和 en.json,可以这样预置:
- 定义一个工厂函数
createT(lang, resources),接收语言码和该语言的完整翻译对象 - 返回一个只认 key 的
t(key, options?)函数,内部直接查resources[lang] - 这样每次切换语言时,只需重新调用
createT生成新t,旧的自动失效,无状态污染
支持带插值的键值查找
真实文案常含变量,比如 "hello {name}, you have {count} messages"。柯里化可把插值逻辑收进一层:
-
t函数返回的不是字符串,而是一个接受options的函数:t('welcome')( { name: 'Alice', count: 5 } ) - 内部用模板字符串或正则替换,如
text.replace(/{(\w+)}/g, (_, k) => options[k] ?? '') - 也可以更严谨地用
Intl.MessageFormat(需 polyfill),它原生支持复数、性别等规则
自动 fallback 到默认语言
用户请求的 key 在当前语言包里可能不存在,柯里化能帮你把 fallback 行为封装进去:
- 在
createT中同时传入fallbackLang和fallbackResources - 当
resources[lang][key]为undefined时,自动降级查fallbackResources[key] - 不必每次调用都写
resources[lang][key] || resources['en'][key],逻辑统一收口
与框架或 DOM 更新联动
柯里化后的 t 函数本身不触发重绘,但可以把它设计成响应式入口:
- 返回的
t函数内部触发自定义事件,如dispatchEvent(new CustomEvent('i18n:change')) - 组件监听该事件,调用自身
render()或更新 innerText - 或者返回一个 getter:
const $t = t('submit'); console.log($t.value);,配合 signal 实现自动追踪
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











