feat: complete

This commit is contained in:
zyronon
2023-09-14 01:51:05 +08:00
parent 107e6b54fd
commit d1af8e3ec6
5 changed files with 1222 additions and 75 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ import {useBaseStore} from "@/stores/base";
import {usePracticeStore} from "@/components/Practice/usePracticeStore.ts";
import {useEventListener} from "@/hooks/useEvent.ts";
import TypeWord from "@/components/Practice/TypeWord.vue";
import {localTranslate, networkTranslate} from "@/hooks/translate.ts";
import {applyLocalTranslate, getNetworkTranslate} from "@/hooks/translate.ts";
import IconWrapper from "@/components/IconWrapper.vue";
import Tooltip from "@/components/Tooltip.vue";
import MiniModal from "@/components/MiniModal.vue";
@@ -126,7 +126,7 @@ onMounted(async () => {
console.time()
// await useNetworkTranslate(article, TranslateEngine.Baidu, true)
localTranslate(article, article.customTranslate)
applyLocalTranslate(article, article.customTranslate)
console.timeEnd()
// console.log(cloneDeep(article))
})

View File

@@ -109,6 +109,10 @@ export function splitArticle(article: string, lang: string = 'en', keyboardMap:
}
})
if (addCurrent) {
//`“这是私人谈话”`这种没有结束符号的情况swtich走不到结束符号也就不会起新的一行
if (word.name.length) {
sentence.words.push(word)
}
sentence.words.push(cloneDeep({
...DefaultArticleWord,
name: v,
@@ -132,7 +136,9 @@ export function splitArticle(article: string, lang: string = 'en', keyboardMap:
break
case '\n':
section.pop()
if (!sentence.words.length) {
section.pop()
}
if (i !== arr.length - 1) {
sections.push([])
section = sections[sections.length - 1]
@@ -204,7 +210,6 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
word = cloneDeep(DefaultArticleWord)
break
case keyboardMap.QuoteLeft:
sentence.words.push(cloneDeep({
...DefaultArticleWord,
name: v,
@@ -215,7 +220,7 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
word = cloneDeep(DefaultArticleWord)
break
case keyboardMap.QuoteRight:
let symbolPosition = null
let nearSymbolPosition = null
let indexs = {
a: -1,
b: -1,
@@ -225,17 +230,15 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
sections.toReversed().map((sectionItem, a) => {
sectionItem.toReversed().map((sentenceItem, b) => {
sentenceItem.words.toReversed().map((wordItem, c) => {
if (wordItem.symbolPosition !== '' && symbolPosition === null) {
symbolPosition = wordItem.symbolPosition === 'end'
if (wordItem.symbolPosition !== '' && nearSymbolPosition === null) {
nearSymbolPosition = wordItem.symbolPosition
indexs = {a, b, c}
}
})
})
})
if (symbolPosition || symbolPosition === null) {
} else {
if (nearSymbolPosition === 'start' || nearSymbolPosition === null) {
let addCurrent = false
sentence.words.toReversed().map((wordItem, c) => {
if (wordItem.symbolPosition === 'start' && !addCurrent) {
@@ -243,6 +246,10 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
}
})
if (addCurrent) {
//`“这是私人谈话”`这种没有结束符号的情况swtich走不到结束符号也就不会起新的一行
if (word.name.length) {
sentence.words.push(word)
}
sentence.words.push(cloneDeep({
...DefaultArticleWord,
name: v,
@@ -263,10 +270,11 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
}))
}
}
break
case '\n':
section.pop()
if (!sentence.words.length) {
section.pop()
}
if (i !== arr.length - 1) {
sections.push([])
section = sections[sections.length - 1]
@@ -284,6 +292,8 @@ export function splitCNArticle(article: string, lang: string = 'en', keyboardMap
break
}
})
console.log(cloneDeep(sections))
sections = sections.filter(sectionItem => sectionItem.length)
sections.map((sectionItem, a) => {
sectionItem.map((sentenceItem, b) => {
sentenceItem.text = sentenceItem.words.reduce((previousValue: string, currentValue) => {

View File

@@ -1,13 +1,13 @@
import {Article, Sentence, TranslateEngine} from "@/types.ts";
import Baidu from "@opentranslate/baidu";
import {axiosInstance} from "@/utils/http.ts";
import {CnKeyboardMap, splitCNArticle} from "@/hooks/article.ts";
import {CnKeyboardMap, EnKeyboardMap, splitCNArticle} from "@/hooks/article.ts";
import {Translator} from "@opentranslate/translator/src/translator.ts";
export function localTranslate(article: Article, translate: string) {
export function applyLocalTranslate(article: Article, translate: string) {
if (translate.trim()) {
let articleTranslate = splitCNArticle(translate, 'cn', CnKeyboardMap)
console.log('articleTranslate',articleTranslate)
// console.log('articleTranslate', articleTranslate)
for (let i = 0; i < article.sections.length; i++) {
let v = article.sections[i]
@@ -15,8 +15,8 @@ export function localTranslate(article: Article, translate: string) {
let sentence = v[j]
try {
sentence.translate = articleTranslate[i][j].text
}catch (e) {
console.log('没有对应的翻译',sentence.text)
} catch (e) {
// console.log('没有对应的翻译', sentence.text)
}
}
}
@@ -40,14 +40,14 @@ export function getCompleteTranslate(article: Article) {
* @param allShow 是否翻译完所有之后才显示
* @param progressCb 进度回调
* */
export async function networkTranslate(
export async function getNetworkTranslate(
article: Article,
translateEngine: TranslateEngine,
allShow: boolean = false,
progressCb?: (val: number) => void
) {
if (article.networkTranslate) {
localTranslate(article, article.networkTranslate)
applyLocalTranslate(article, article.networkTranslate)
} else {
let translator: Translator
if (translateEngine === TranslateEngine.Baidu) {
@@ -77,7 +77,16 @@ export async function networkTranslate(
let r = await translator.translate(sentence.text, 'en', 'zh-CN')
if (r) {
const cb = () => {
sentence.translate = r.trans.paragraphs[0]
//特殊情况
// 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
if (!allShow) {
//一次显示所有,顺序会乱
article.networkTranslate += sentence.translate

View File

@@ -122,6 +122,7 @@ export interface Article {
newWords: Word[],
articleAllWords: string[],
sections: Sentence[][],
translateType: number
}
export interface Dict {