UNPKG

@voerkai18n/utils

Version:

utils for voerkai18n

59 lines (49 loc) 2.08 kB
/** * 将idMap应用到翻译结果中 * */ import { escapeRegex } from "./escapeRegex" // 捕获翻译文本正则表达式二: 能够支持复杂的表达式,但是当提供不完整的t函数定义时,也会进行匹配提取 // const MessageRegex = /([ \t\^;\{\(\,=\'\"\.\[\|\+\>])(t)\(\s*(["']{1})(.*?)(\3)/gm // const MessageComponentRegex = /<Translate\s+[^>]*(?<![:@#%&*])message\s*=\s*(?:"([^"]+)"|{["'`](.+?)["'`]}|{`([^`]+)`})/gm const getMessageRegex = (names:string[]=['t'])=>{ return new RegExp(`([ \\t\\^;\\{\\(\\,=\\'\\"\\.\\[\\|\\+\\>])(${names.map(name=>escapeRegex(name)).join("|")})\\(\\s*(["']{1})(.*?)(\\3)`,"gm") } const getComponentRegex = (tags:string[]=['Translate'])=>{ return new RegExp(`<(${tags.map(tag=>escapeRegex(tag)).join("|")})(\\s+[^>]*)(?<![:@#%&*])message\\s*=\\s*(?:"([^"]+)"|{["'\`](.+?)["'\`]}|{\`([^\`]+)\`})`,"gm") } export type ApplyIdMapOptions = { tFuncNames?: string[] tComponentNames?:string[] } export function applyIdMap(code:string,idMap:Record<string,string>,options?:ApplyIdMapOptions):string{ const { tFuncNames, tComponentNames } = Object.assign({ tFuncNames:['t','$t'], tComponentNames:['Translate','v-translate'] },options) return code.replace(getMessageRegex(tFuncNames),(matched,pre,tName,_,message,n)=>{ return `${pre}${tName}('${idMap[message] || message}'` }).replace(getComponentRegex(tComponentNames),(_,tagName,attrs,message)=>{ return `<${tagName}${attrs}message="${idMap[message] || message}"` }) } // console.log(applyIdMap(String.raw` // t("aaa") // t('bbb') // t("ccc", {xxx:xxx}) // t('ddd', [1,2,3,""]) // t("eee", {xxx:xxx},{}) // t('fff', [1,2,3,""],{}) // t("ggg", {xxx:xxx},()=>{}) // t('hhh', [1,2,3,""],()=>{}) // $t('iii', [1,2,3,""],()=>{}) // `,{ // "aaa":"1", // "bbb":"2", // "ccc":"3", // "ddd":"4", // "eee":"5", // "fff":"6", // "ggg":"7", // "hhh":"8" // }))