i18n-ai-trans
Version:
i18n-translate 是一个高效、简介的多语言翻译工具,安装后只需简单几步就能实现整个多语言文本的快速翻译。
52 lines (45 loc) • 1.95 kB
JavaScript
const fs = require("fs")
const path = require("path")
const progress = require("process")
const { getMissContent, setMissContent, getLanguageContent, getLangStat, setLanguageContent } = require('./utils')
const { translate } = require("./translate")
const exec = (config) => {
const { translateDir, SERVER_URL, API_KEY, SystemContent, ENDPOINT_ID, sourceLang = 'en', langs = ['en', 'zh'] } = config
const absDir = path.join(progress.cwd(), translateDir)
if (!fs.statSync(absDir).isDirectory()) throw '找不到需要翻译的目录:' + absDir
const { isDir, isFile } = getLangStat(absDir, sourceLang)
if (!isDir && !isFile) throw `找不到 ${sourceLang} 需要翻译内容`
const translateLangs = langs.filter(item => item !== sourceLang)
// 获取源语言(一般是英文)内容
const enContent = getLanguageContent(absDir, sourceLang)
translateLangs.forEach(async lang => {
// 获取翻译语言的内容
const langContent = getLanguageContent(absDir, lang)
// 只需要翻译缺失和未翻译的字段
const translateContent = getMissContent(enContent, langContent)
if (!translateContent) {
console.log(`${lang} 尚未发现新增文本`);
return
}
const [translatorData, error] = await translate({
SERVER_URL: SERVER_URL || 'https://llm-hub.parcelpanel.com/v1/chat/completions',
API_KEY,
ENDPOINT_ID,
SystemContent,
lang,
translateContent
})
if (translatorData) {
// 填充翻译内容
setMissContent(langContent, translatorData)
// 写入新的文件内容
setLanguageContent(absDir, lang, isDir, langContent)
console.log(`${lang} 更新成功`);
} else {
console.log(`${lang} 更新失败`, error);
}
})
}
module.exports = {
exec
}