翻译函数t增加支持带参数翻译
This commit is contained in:
parent
7948d4dcc2
commit
09ecafc25a
@ -78,6 +78,29 @@ function findBalancedBracket(code, startPos, openChar = '(', closeChar = ')') {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理带参数的 t() 调用,支持 t('key') 和 t('key', { params })
|
||||||
|
* @param {string} code - 源代码
|
||||||
|
* @param {object} translations - 翻译字典
|
||||||
|
* @returns {string} 处理后的代码
|
||||||
|
*/
|
||||||
|
function replaceTFunctionWithParams(code, translations) {
|
||||||
|
const result = code.replace(
|
||||||
|
/\bt\((['"])((?:\\.|(?!\1).)*)\1(?:,\s*(\{[^}]*\}))?\)/g,
|
||||||
|
(match, quote, key, params) => {
|
||||||
|
const unescapedKey = unescapeString(key);
|
||||||
|
const translation = translations[unescapedKey];
|
||||||
|
if (translation) {
|
||||||
|
// 如果有参数,保持参数不变,只替换 key 部分
|
||||||
|
const translated = quote + escapeString(translation, quote) + quote;
|
||||||
|
return params ? `t(${translated},${params})` : `t(${translated})`;
|
||||||
|
}
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理参数对象中的嵌套 $t() 调用
|
* 处理参数对象中的嵌套 $t() 调用
|
||||||
* @param {string} paramsCode - 参数部分的代码
|
* @param {string} paramsCode - 参数部分的代码
|
||||||
@ -206,15 +229,8 @@ function vitePluginTranslate(options = {}) {
|
|||||||
code = processVueSFC(code, translations);
|
code = processVueSFC(code, translations);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 非 Vue 文件
|
// 非 Vue 文件 - 支持带参数的 t() 调用
|
||||||
code = code.replace(
|
code = replaceTFunctionWithParams(code, translations);
|
||||||
/\bt\((['"])((?:\\.|(?!\1).)*)\1\)/g,
|
|
||||||
(match, quote, key) => {
|
|
||||||
const unescapedKey = unescapeString(key);
|
|
||||||
const translation = translations[unescapedKey];
|
|
||||||
return translation ? quote + escapeString(translation, quote) + quote : match;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return code !== originalCode ? { code, map: null } : null;
|
return code !== originalCode ? { code, map: null } : null;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user