进入docker搜索libretranslate进行安装,支持语言在安装目录的yml文件去修改
前端调用
// utils/translateHtmlClient.js
/**
* 在浏览器中翻译含 HTML 的字符串(保留标签)
* @param {string} html - 原始 HTML 字符串
* @param {string} targetLang - 目标语言,如 'zh'
* @returns {Promise<string>} 翻译后的 HTML
*/
export async function translateHtml(html, targetLang, sourceLang = 'zh') {
// 1. 解析 HTML
const parser = new DOMParser()
const doc = parser.parseFromString(html, 'text/html')
// 2. 提取所有文本节点
const textNodes = []
const walker = document.createTreeWalker(doc.body, NodeFilter.SHOW_TEXT)
let node
while ((node = walker.nextNode())) {
if (node.textContent.trim()) {
textNodes.push(node)
}
}
// 3. 批量翻译文本
const texts = textNodes.map(n => n.textContent)
const translatedTexts = await Promise.all(
texts.map(text => translateText(text, targetLang, sourceLang))
)
// 4. 回填翻译结果
textNodes.forEach((node, i) => {
node.textContent = translatedTexts[i]
})
// 5. 返回新 HTML
return doc.body.innerHTML
}
// 调用 LibreTranslate 翻译纯文本
async function translateText(text, targetLang, sourceLang = 'zh') {
const res = await fetch('http://域名/translate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
q: text,
source: sourceLang,
target: targetLang,
alternatives: 3,
format: 'text'
})
})
const data = await res.json()
console.log(data)
return data.translatedText || text
}
正文完