feat: complete
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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))
|
||||
})
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -122,6 +122,7 @@ export interface Article {
|
||||
newWords: Word[],
|
||||
articleAllWords: string[],
|
||||
sections: Sentence[][],
|
||||
translateType: number
|
||||
}
|
||||
|
||||
export interface Dict {
|
||||
|
||||
Reference in New Issue
Block a user