feat: dev add article

This commit is contained in:
zyronon
2023-09-14 15:48:58 +08:00
parent d1af8e3ec6
commit 675738a73e
9 changed files with 245 additions and 173 deletions

View File

@@ -156,6 +156,7 @@ export function splitArticle(article: string, lang: string = 'en', keyboardMap:
break
}
})
sections = sections.filter(sectionItem => sectionItem.length)
sections.map((sectionItem, a) => {
sectionItem.map((sentenceItem, b) => {
sentenceItem.text = sentenceItem.words.reduce((previousValue: string, currentValue) => {
@@ -164,14 +165,10 @@ export function splitArticle(article: string, lang: string = 'en', keyboardMap:
}, '')
})
})
// if (!sections.length && section.length) {
// sections.push(section)
// }
return sections
}
export function splitCNArticle(article: string, lang: string = 'en', keyboardMap: KeyboardMap = CnKeyboardMap): Sentence[][] {
export function splitCNArticle(article: string, lang: string = 'cn', keyboardMap: KeyboardMap = CnKeyboardMap): Sentence[][] {
let sections: Sentence[][] = []
let section: Sentence[] = []
let sentence: Sentence = {
@@ -221,18 +218,12 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
break
case keyboardMap.QuoteRight:
let nearSymbolPosition = null
let indexs = {
a: -1,
b: -1,
c: -1
}
//TODO 可以优化成for+break
sections.toReversed().map((sectionItem, a) => {
sectionItem.toReversed().map((sentenceItem, b) => {
sentenceItem.words.toReversed().map((wordItem, c) => {
if (wordItem.symbolPosition !== '' && nearSymbolPosition === null) {
nearSymbolPosition = wordItem.symbolPosition
indexs = {a, b, c}
}
})
})
@@ -292,7 +283,7 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
break
}
})
console.log(cloneDeep(sections))
// console.log(cloneDeep(sections))
sections = sections.filter(sectionItem => sectionItem.length)
sections.map((sectionItem, a) => {
sectionItem.map((sentenceItem, b) => {
@@ -302,9 +293,20 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
}, '')
})
})
// if (!sections.length && section.length) {
// sections.push(section)
// }
return sections
}
export function getSplitTranslateText(article: string) {
let sections = splitCNArticle(article)
let str = ''
if (sections.length) {
sections.map((sectionItem) => {
sectionItem.map((sentenceItem) => {
str += sentenceItem.text + '\n'
})
str += '\n'
})
}
return str
}

View File

@@ -3,32 +3,49 @@ import Baidu from "@opentranslate/baidu";
import {axiosInstance} from "@/utils/http.ts";
import {CnKeyboardMap, EnKeyboardMap, splitCNArticle} from "@/hooks/article.ts";
import {Translator} from "@opentranslate/translator/src/translator.ts";
import {cloneDeep} from "lodash-es";
export function applyLocalTranslate(article: Article, translate: string) {
export function updateLocalSentenceTranslate(article: Article, translate: string) {
if (translate.trim()) {
let articleTranslate = splitCNArticle(translate, 'cn', CnKeyboardMap)
let articleTranslate = translate.split('\n')
// console.log('articleTranslate', articleTranslate)
let count = 0
for (let i = 0; i < article.sections.length; i++) {
let v = article.sections[i]
for (let j = 0; j < v.length; j++) {
let sentence = v[j]
try {
sentence.translate = articleTranslate[i][j].text
sentence.translate = articleTranslate[count]
} catch (e) {
// console.log('没有对应的翻译', sentence.text)
console.log('没有对应的翻译', sentence.text)
}
count++
}
count++
}
}
}
export function getCompleteTranslate(article: Article) {
export function getSentenceAllTranslateText(article: Article) {
let str = ''
article.sections.map((v: Sentence[]) => {
v.map((w: Sentence, j, arr) => {
str += (w.translate ?? w.text) + (j === arr.length - 1 ? '\n' : '')
if (w.translate) {
str += w.translate + '\n'
}
})
str += '\n'
})
return str
}
export function getSentenceAllText(article: Article) {
let str = ''
article.sections.map((v: Sentence[]) => {
v.map((w: Sentence, j, arr) => {
str += w.text
})
str += '\n'
})
return str
}
@@ -47,7 +64,7 @@ export async function getNetworkTranslate(
progressCb?: (val: number) => void
) {
if (article.networkTranslate) {
applyLocalTranslate(article, article.networkTranslate)
updateLocalSentenceTranslate(article, article.networkTranslate)
} else {
let translator: Translator
if (translateEngine === TranslateEngine.Baidu) {
@@ -77,19 +94,10 @@ export async function getNetworkTranslate(
let r = await translator.translate(sentence.text, 'en', 'zh-CN')
if (r) {
const cb = () => {
//特殊情况
// http://localhost:3000/baidu?from=en&to=zh&q=In+the+end,+&salt=1694621045527&appid=20230910001811857&sign=c4f0bf403fd34936c6bc4978b13ad31f
//百度翻译In the end返回的结果没有逗号导致少了一句解析出错
let str = r.trans.paragraphs[0]
if (sentence.words[sentence.words.length - 1].name === EnKeyboardMap.Comma) {
if (str[str.length - 1] !== '') {
str += ''
}
}
sentence.translate = str
sentence.translate = r.trans.paragraphs[0]
if (!allShow) {
//一次显示所有,顺序会乱
article.networkTranslate += sentence.translate
article.networkTranslate += sentence.translate + '\n'
}
}
return Promise.resolve(cb)
@@ -167,17 +175,17 @@ export async function getNetworkTranslate(
retryCount++
} while (promiseList.length)
cbs.map(v => v())
article.networkTranslate = getCompleteTranslate(article)
article.networkTranslate = getSentenceAllTranslateText(article)
if (progressCb) {
clearInterval(timer)
progress = 91
progress = 100
progressCb(100)
}
resolve(true)
})
} else {
article.networkTranslate = getCompleteTranslate(article)
article.networkTranslate = getSentenceAllTranslateText(article)
}
}
}