柯里化可将 locale 预先固化进翻译函数,生成特定语言的翻译器(如 tZh = t('zh-CN')),调用时只需传 key,简洁且防遗漏;支持模块注入与动态切换。

可以用柯里化把语言环境(locale)预先固化进翻译函数,让后续调用无需重复传入语言参数,既简洁又避免遗漏。
核心思路:把 locale 当作第一参数固定下来
传统翻译函数通常每次都要显式传入语言和键名,比如 t('zh-CN', 'welcome') 或 t({ locale: 'ja', key: 'submit' })。而柯里化后,可先生成一个“已绑定中文”的翻译器:
- tZh = t('zh-CN') → 返回一个新函数,只等 key
- tZh('common.welcome') → 直接输出“欢迎使用”
- 同理,tJa = t('ja') 生成日文版翻译器
实际实现示例(JavaScript)
假设你已有基础翻译函数 translate(locale, key, options?),柯里化封装如下:
const curryTranslate = (locale) => (key, options = {}) =>
translate(locale, key, options);
// 创建特定语言的翻译器
const tEn = curryTranslate('en-US');
const tZh = curryTranslate('zh-CN');
const tAr = curryTranslate('ar'); // 自动适配 RTL
// 使用时干净利落
console.log(tEn('button.submit')); // "Submit"
console.log(tZh('button.submit')); // "提交"
console.log(tAr('button.submit')); // "إرسال"
配合模块与默认语言更实用
在应用初始化阶段,根据用户偏好或系统设置确定当前 locale,再生成全局可用的翻译器:
- 从 navigator.language、URL 参数或 localStorage 读取 locale
- 用该 locale 调用柯里化函数,得到 t() 绑定实例
- 将 t 注入 React Context、Vue app.config.globalProperties 或导出为工具函数
- 组件内直接调用 t('header.title'),无需关心当前是哪种语言
延伸:支持动态切换语言
柯里化本身不处理状态变更,但可与响应式机制结合。例如:
- 维护一个 reactive currentLocale(如 Vue 的 ref 或 Zustand store)
- 定义 useT = () => curryTranslate(currentLocale())
- 组件内 const t = useT(),当 currentLocale 变化时,t 自动指向新语言版本











