正则匹配多语言变量:借助内置翻译函数检测对象目标变量
解决多语言环境下的对象字段检测问题
我之前在多语言项目里也遇到过一模一样的问题——用正则硬匹配不同语言的字段名简直是噩梦,还好你有内置的getAjaxTranslation函数,这就能完美解决问题!
核心思路其实很简单:不要用正则去硬匹配各种语言的字段变体,而是利用内置翻译函数,把你要检测的原始字段(比如spec.title对应的'Length (mm)')转换成对应语言的字符串,再直接匹配对象的键。这样不管后续新增多少语言,都不用修改检测逻辑,只需要维护翻译库就行。
具体实现步骤
1. 针对当前响应语言的精准检测
如果你的脚本运行时已经知道当前JSON响应的语言(或者getAjaxTranslation会自动根据当前环境返回对应语言的翻译),可以直接这么做:
// 定义你要检测的原始英文字段(对应spec.title的目标值) const originalTarget = 'Length (mm)'; // 用内置函数获取该字段在当前语言下的翻译 const translatedField = getAjaxTranslation(originalTarget); // 检测目标对象中是否存在这个翻译后的字段 const hasTargetField = Object.keys(yourTargetObject).includes(translatedField);
这种方式最高效,因为只需要一次翻译和一次匹配,完全避免了正则的复杂处理(比如德语变音字符、西班牙语特殊字符的转义问题)。
2. 兼容多语言响应的通用检测
如果JSON响应的语言是不确定的(可能随机返回德/西/英文),可以先获取所有支持语言的翻译结果,再检查对象是否包含其中任意一个:
const originalTarget = 'Length (mm)'; // 假设项目支持的语言代码列表,根据实际情况调整 const supportedLangs = ['en', 'de', 'es']; // 获取所有可能的翻译字段 const possibleFields = supportedLangs.map(lang => { // 如果getAjaxTranslation支持传入语言参数指定翻译语言,就这么写 return getAjaxTranslation(originalTarget, lang); // 如果不支持参数,可能需要先切换语言环境再调用,具体看函数实现 }); // 检查对象是否包含任意一个目标字段 const hasTargetField = Object.keys(yourTargetObject).some(key => possibleFields.includes(key));
为什么不用正则?
之前用正则的问题在于,你需要手动维护所有语言的字段变体,比如要写/Length \(mm\)|Länge \(mm\)|Longitud \(mm\)/这种正则,后续新增语言就得不断修改正则,不仅麻烦还容易出错(比如漏写特殊字符转义)。而用翻译函数的话,所有翻译逻辑都集中在getAjaxTranslation里,检测逻辑完全不用动,扩展性强太多。
内容的提问来源于stack exchange,提问作者Meules
相关产品推荐
相关产品推荐

