翻译函数t增加支持带参数翻译
This commit is contained in:
parent
7948d4dcc2
commit
09ecafc25a
@ -78,6 +78,29 @@ function findBalancedBracket(code, startPos, openChar = '(', closeChar = ')') {
|
||||
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() 调用
|
||||
* @param {string} paramsCode - 参数部分的代码
|
||||
@ -206,15 +229,8 @@ function vitePluginTranslate(options = {}) {
|
||||
code = processVueSFC(code, translations);
|
||||
}
|
||||
} else {
|
||||
// 非 Vue 文件
|
||||
code = code.replace(
|
||||
/\bt\((['"])((?:\\.|(?!\1).)*)\1\)/g,
|
||||
(match, quote, key) => {
|
||||
const unescapedKey = unescapeString(key);
|
||||
const translation = translations[unescapedKey];
|
||||
return translation ? quote + escapeString(translation, quote) + quote : match;
|
||||
}
|
||||
);
|
||||
// 非 Vue 文件 - 支持带参数的 t() 调用
|
||||
code = replaceTFunctionWithParams(code, translations);
|
||||
}
|
||||
|
||||
return code !== originalCode ? { code, map: null } : null;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user