首页
学习
活动
专区
圈层
工具
发布

translate 专有词语使用扩展

我用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侧完全一致(如李专=李专),即可实现专有词的无翻译效果。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oe92qFtPpn7rhDq_tzhmFq7Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券