Skip to content

Commit 595c31a

Browse files
lededevz
authored andcommitted
Option: Translation First
New global rules: Original First / Translation First 新增全局规则:文本顺序 [原文在上方](默认) [译文在上方](可选)
1 parent 9f7b2c3 commit 595c31a

5 files changed

Lines changed: 65 additions & 5 deletions

File tree

pnpm-workspace.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
allowBuilds:
2+
core-js: true
3+
core-js-pure: true

src/config/i18n.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,6 +1962,27 @@ export const I18N = {
19621962
ja: `完全な実装ではなく、一部のページでスタイルの問題が発生する可能性があります。`,
19631963
ko: `완벽한 구현이 아니며 일부 페이지에서 스타일 문제가 발생할 수 있습니다.`,
19641964
},
1965+
trans_order: {
1966+
zh: `文本顺序`,
1967+
en: `Translation Order`,
1968+
zh_TW: `文字順序`,
1969+
ja: `テキスト順序`,
1970+
ko: `텍스트 순서`,
1971+
},
1972+
original_first: {
1973+
zh: `原文在上方`,
1974+
en: `Original First`,
1975+
zh_TW: `原文在上方`,
1976+
ja: `原文が最初`,
1977+
ko: `원문이 먼저`,
1978+
},
1979+
translation_first: {
1980+
zh: `译文在上方`,
1981+
en: `Translation First`,
1982+
zh_TW: `譯文在上方`,
1983+
ja: `翻訳が最初`,
1984+
ko: `번역이 먼저`,
1985+
},
19651986
transonly_revert: {
19661987
zh: `悬浮显示原文`,
19671988
en: `Hover to Show Original`,

src/config/rules.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ export const GLOBLA_RULE = {
156156
splitParagraph: OPT_SPLIT_PARAGRAPH_DISABLE,
157157
splitLength: 100,
158158
highlightWords: OPT_HIGHLIGHT_WORDS_DISABLE,
159+
transOrder: "original-first", // 文本顺序:原文在上 ("original-first") 或 译文在上 ("translation-first")
159160
};
160161

161162
// 预设规则列表,初始化时直接注册

src/libs/translator.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,10 @@ export class Translator {
302302
#${APP_CONSTS.boxID}, .${APP_CONSTS.boxID}_warpper,
303303
#${APP_CONSTS.popupID}, .${APP_CONSTS.popupID}_warpper`;
304304

305-
static BUILTIN_IGNORE_SELECTOR = `address, area, audio, br, canvas,
306-
data, datalist, embed, head, iframe, input, noscript, map,
307-
object, option, param, picture, progress,
308-
select, script, style, svg, track, textarea, template,
305+
static BUILTIN_IGNORE_SELECTOR = `address, area, audio, br, canvas,
306+
data, datalist, embed, head, iframe, input, noscript, map,
307+
object, option, param, picture, progress,
308+
select, script, style, svg, track, textarea, template,
309309
video, wbr, .notranslate, [contenteditable='true'], [translate='no']`;
310310

311311
#setting; // 设置选项
@@ -1686,6 +1686,7 @@ export class Translator {
16861686
toLang,
16871687
// skipLangs = [],
16881688
highlightWords,
1689+
transOrder = "original-first",
16891690
} = this.#rule;
16901691
const {
16911692
newlineLength,
@@ -1718,8 +1719,19 @@ export class Translator {
17181719
}
17191720
inner.appendChild(createLoadingSVG());
17201721
wrapper.appendChild(inner);
1722+
1723+
// 在原文和译文之间添加分隔换行
1724+
const separatorBr = document.createElement("br");
1725+
separatorBr.hidden = hideOrigin;
1726+
wrapper.appendChild(separatorBr);
1727+
17211728
this.#withViewportAnchor(() => {
1722-
nodes[nodes.length - 1].after(wrapper);
1729+
// 根据 transOrder 选项决定译文显示位置
1730+
if (transOrder === "translation-first") {
1731+
nodes[0].before(wrapper); // 译文在上
1732+
} else {
1733+
nodes[nodes.length - 1].after(wrapper); // 原文在上(默认)
1734+
}
17231735
});
17241736

17251737
const currentRunId = this.#runId;

src/views/Options/Rules.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ function RuleFields({ rule, rules, setShow, setKeyword }) {
151151
splitParagraph = OPT_SPLIT_PARAGRAPH_DISABLE, // 段落切分策略
152152
splitLength = 0, // 段落切分最大长度
153153
highlightWords = OPT_HIGHLIGHT_WORDS_DISABLE, // 单词高亮策略
154+
transOrder = "original-first", // 文本顺序:原文在上或译文在上
154155
} = formValues;
155156

156157
// 判断当前表单值是否与初始值不同,决定是否激活“保存”按钮
@@ -491,6 +492,28 @@ function RuleFields({ rule, rules, setShow, setKeyword }) {
491492
</TextField>
492493
</Grid>
493494

495+
{/* 文本顺序设置 */}
496+
<Grid item xs={12} sm={12} md={6} lg={3}>
497+
<TextField
498+
select
499+
size="small"
500+
fullWidth
501+
name="transOrder"
502+
value={transOrder}
503+
label={i18n("trans_order")}
504+
disabled={disabled}
505+
onChange={handleChange}
506+
>
507+
{GlobalItem}
508+
<MenuItem value="original-first">
509+
{i18n("original_first")}
510+
</MenuItem>
511+
<MenuItem value="translation-first">
512+
{i18n("translation_first")}
513+
</MenuItem>
514+
</TextField>
515+
</Grid>
516+
494517
{/* 悬停恢复原文设置 */}
495518
<Grid item xs={12} sm={12} md={6} lg={3}>
496519
<TextField

0 commit comments

Comments
 (0)