宝塔安装翻译软件libretranslate

63次阅读
没有评论

进入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
}

正文完
 
评论(没有评论)