我用translate js为我的小站cfmtr.top做了多语种翻译,在使用 translate.js 进行多语言翻译开发的过程中,我发现其专有词典(nomenclature)的默认使用方式存在一定局限性,无法很好地满足我的一些要求,translate.nomenclature.append(from, to) 方法要求to参数必须指定具体目标语言,而from参数虽可留空代表任意源语言,但这无法满足 “某一专用名词在多语言场景下统一翻译(或不翻译)” 的需求。比如部分品牌专属词汇、文化特有名词,希望在不同目标语言中保持统一译法,或完全不做翻译,默认的单语言绑定方式就显得十分繁琐。为此,我通过扩展代码逻辑,实现了专有词语翻译规则的批量配置,大幅提升了多语言场景下专有词翻译的灵活性。
我的思路是,语言状态持久化:通过 Cookie 存储当前选中的目标语言,确保页面刷新后仍能保持用户的语言选择,避免重复设置;语言列表动态扩展:将常用目标语言封装为列表,并支持根据当前选中语言动态补充,确保翻译规则覆盖所有需要的语言类型;翻译规则批量绑定:根据目标语言类型分类,为不同语种批量配置专有词翻译规则,实现 “一套逻辑适配多语言” 的效果。
核心代码:
......
// 存储当前选中的目标语言
var mlanguage = '';
// 定义基础目标语言列表(可扩展)
var languageList = [
{ code: 'english', label: '英语' },
{ code: 'spanish', label: '西班牙语' },
{ code: 'french', label: '法语' },
{ code: 'german', label: '德语' }
];
// 语言选择框变更事件:更新语言状态并触发翻译
translate.selectLanguageTag.selectOnChange = function(event){
// 排除空值选择
if(event.target.value!==''){
mlanguage = event.target.value;
// 将选中语言存入Cookie,有效期2天
setmCookie("mlanguage",mlanguage, 2);
// 执行专有词翻译规则配置
transzyw(mlanguage);
// 触发translate.js的语言切换和翻译执行
translate.changeLanguage(mlanguage);
}
};
// 页面初始化:读取Cookie中的语言配置,无则默认英语
if (checkmCookieExists("mlanguage")) {
mlanguage = getmCookie("mlanguage");
} else {
setmCookie("mlanguage", "english", 2);
mlanguage = "english";
}
// 初始化专有词翻译规则并执行翻译
transzyw(mlanguage);
translate.execute();
/**
* 核心扩展函数:批量配置专有词翻译规则
* @param {string} targetLang - 当前目标语言编码
*/
function transzyw(targetLang){
// 确保当前选中的语言被加入语言列表(避免遗漏)
const newItem = { code: targetLang, label: targetLang };
const isExist = languageList.some(item => item.code === newItem.code);
if (!isExist) {
languageList.push(newItem);
}
// 提取所有目标语言编码,用于批量遍历
const targetLangs = languageList.map(lang => lang.code);
// 定义需要特殊处理的语种(如日语、繁体中文)
let tmarr = ['chinese_traditional','japanese'];
// 遍历所有目标语言,批量配置专有词翻译规则
targetLangs.forEach(lang => {
if(tmarr.includes(lang)){
// 针对日语/繁体中文:使用繁体/日文汉字译法
translate.nomenclature.append('chinese_simplified', lang, `
李专业=李専業
拙笔残墨=拙筆残墨
首页=HomePage
`);
}else{
// 其他语种:使用拼音/英文统一译法
translate.nomenclature.append('chinese_simplified', lang, `
专政=LiZhuanye
拙笔残墨=Poems
首页=HomePage
`);
}
});
}
通过setmCookie和getmCookie方法实现语言选择的持久化,解决了页面刷新后语言配置丢失的问题,保证翻译规则的连续性;
在transzyw函数中,先校验当前选中语言是否在基础列表中,若不在则自动添加,确保翻译规则能覆盖所有可能的目标语言;
通过tmarr定义特殊语种列表,为不同类型的目标语言配置差异化的专有词译法 —— 比如日语 / 繁体中文使用汉字适配,其他语种使用拼音 / 英文,实现了 “一类规则适配一类语言” 的批量配置,避免了逐个语言调用append方法的繁琐。
通过上述扩展,原本需要为每个目标语言单独调用translate.nomenclature.append的操作,现在只需一次函数调用即可完成所有语种的专有词规则配置。对于需要 “所有语言统一译法” 的场景,只需去掉tmarr的判断逻辑,直接为所有targetLangs配置相同的翻译规则即可;对于 “特定词汇不翻译” 的需求,只需将to侧的内容设置为与from侧完全一致(如李专=李专),即可实现专有词的无翻译效果。