-
开始翻译
+
+
开始翻译
@@ -196,21 +1321,23 @@ function changeArticle() {
@@ -230,10 +1357,10 @@ function changeArticle() {
/>
取消
- 保存
+ 保存
-
+
{{ sentence.translate }}
diff --git a/src/components/Practice/TypeArticle.vue b/src/components/Practice/TypeArticle.vue
index 4ff6b4c2..895bd2fb 100644
--- a/src/components/Practice/TypeArticle.vue
+++ b/src/components/Practice/TypeArticle.vue
@@ -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))
})
diff --git a/src/hooks/article.ts b/src/hooks/article.ts
index 5103ddc5..c238cbc1 100644
--- a/src/hooks/article.ts
+++ b/src/hooks/article.ts
@@ -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) => {
diff --git a/src/hooks/translate.ts b/src/hooks/translate.ts
index 987e5767..7ad7e506 100644
--- a/src/hooks/translate.ts
+++ b/src/hooks/translate.ts
@@ -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
diff --git a/src/types.ts b/src/types.ts
index ab72e416..9f0edfe6 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -122,6 +122,7 @@ export interface Article {
newWords: Word[],
articleAllWords: string[],
sections: Sentence[][],
+ translateType: number
}
export interface Dict {