diff --git a/src/config/i18n.js b/src/config/i18n.js
index 9db49cc..a0cfe85 100644
--- a/src/config/i18n.js
+++ b/src/config/i18n.js
@@ -577,6 +577,14 @@ export const I18N = {
},
shortcut_press_count: {
zh: `快捷键连击次数`,
- en: `Shortcut Press Nunber`,
+ en: `Shortcut Press Number`,
+ },
+ input_trans_start_sign: {
+ zh: `翻译起始标识`,
+ en: `Translation Start Sign`,
+ },
+ input_trans_start_sign_help: {
+ zh: `标识后面可以加目标语言代码,如: “/en 你好”、“/zh hello”`,
+ en: `The target language code can be added after the sign, such as: "/en 你好", "/zh hello"`,
},
};
diff --git a/src/config/index.js b/src/config/index.js
index a4cd3ed..a748525 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -137,6 +137,7 @@ export const OPT_LANGS_SPECIAL = {
),
[OPT_TRANS_CUSTOMIZE]: new Map([["auto", ""]]),
};
+export const OPT_LANGS_LIST = OPT_LANGS_TO.map(([lang]) => lang);
export const OPT_STYLE_NONE = "style_none"; // 无
export const OPT_STYLE_LINE = "under_line"; // 下划线
@@ -200,6 +201,7 @@ export const GLOBLA_RULE = {
};
// 输入框翻译
+export const OPT_INPUT_TRANS_SIGNS = ["/", "//", "\\", "\\\\", ">", ">>"];
export const DEFAULT_INPUT_SHORTCUT = ["Alt", "i"];
export const DEFAULT_INPUT_RULE = {
transOpen: true,
@@ -208,6 +210,7 @@ export const DEFAULT_INPUT_RULE = {
toLang: "en",
triggerShortcut: DEFAULT_INPUT_SHORTCUT,
triggerCount: 1,
+ transSign: OPT_INPUT_TRANS_SIGNS[0],
};
// 订阅列表
diff --git a/src/libs/translator.js b/src/libs/translator.js
index 59ffddf..e7846d9 100644
--- a/src/libs/translator.js
+++ b/src/libs/translator.js
@@ -12,10 +12,11 @@ import {
DEFAULT_INPUT_RULE,
DEFAULT_TRANS_APIS,
DEFAULT_INPUT_SHORTCUT,
+ OPT_LANGS_LIST,
} from "../config";
import Content from "../views/Content";
import { updateFetchPool, clearFetchPool } from "./fetch";
-import { debounce, genEventName, removeEndchar } from "./utils";
+import { debounce, genEventName, removeEndchar, matchInputStr } from "./utils";
import { stepShortcutRegister } from "./shortcut";
import { apiTranslate } from "../apis";
import { tryDetectLang } from ".";
@@ -265,6 +266,7 @@ export class Translator {
toLang,
triggerCount,
selector,
+ transSign,
} = this._inputRule;
const apiSetting = (this._setting.transApis || DEFAULT_TRANS_APIS)[
translator
@@ -298,6 +300,22 @@ export class Translator {
return;
}
+ if (transSign) {
+ const res = matchInputStr(text, transSign);
+ if (res) {
+ let lang = res[1];
+ if (lang === "zh" || lang === "cn") {
+ lang = "zh-CN";
+ } else if (lang === "tw" || lang === "hk") {
+ lang = "zh-TW";
+ }
+ if (lang && OPT_LANGS_LIST.includes(lang)) {
+ toLang = lang;
+ }
+ text = res[2];
+ }
+ }
+
// console.log("input -->", text);
try {
diff --git a/src/libs/utils.js b/src/libs/utils.js
index 94bd318..efdb1d8 100644
--- a/src/libs/utils.js
+++ b/src/libs/utils.js
@@ -194,3 +194,32 @@ export const removeEndchar = (s, c, count = 1) => {
}
return s.slice(0, i);
};
+
+/**
+ * 匹配字符串及语言标识
+ * @param {*} str
+ * @param {*} sign
+ * @returns
+ */
+export const matchInputStr = (str, sign) => {
+ let reg = /\/([\w-]+)\s+([^]+)/;
+ switch (sign) {
+ case "//":
+ reg = /\/\/([\w-]+)\s+([^]+)/;
+ break;
+ case "\\":
+ reg = /\\([\w-]+)\s+([^]+)/;
+ break;
+ case "\\\\":
+ reg = /\\\\([\w-]+)\s+([^]+)/;
+ break;
+ case ">":
+ reg = />([\w-]+)\s+([^]+)/;
+ break;
+ case ">>":
+ reg = />>([\w-]+)\s+([^]+)/;
+ break;
+ default:
+ }
+ return str.match(reg);
+};
diff --git a/src/views/Options/InputSetting.js b/src/views/Options/InputSetting.js
index 76392d4..1c9a31a 100644
--- a/src/views/Options/InputSetting.js
+++ b/src/views/Options/InputSetting.js
@@ -2,9 +2,13 @@ import Box from "@mui/material/Box";
import Stack from "@mui/material/Stack";
import TextField from "@mui/material/TextField";
import MenuItem from "@mui/material/MenuItem";
-import { limitNumber } from "../../libs/utils";
import { useI18n } from "../../hooks/I18n";
-import { OPT_TRANS_ALL, OPT_LANGS_FROM, OPT_LANGS_TO } from "../../config";
+import {
+ OPT_TRANS_ALL,
+ OPT_LANGS_FROM,
+ OPT_LANGS_TO,
+ OPT_INPUT_TRANS_SIGNS,
+} from "../../config";
import ShortcutInput from "./ShortcutInput";
import FormControlLabel from "@mui/material/FormControlLabel";
import Switch from "@mui/material/Switch";
@@ -20,13 +24,12 @@ export default function InputSetting() {
const handleChange = (e) => {
e.preventDefault();
let { name, value } = e.target;
- console.log({ name, value });
- switch (name) {
- case "triggerCount":
- value = limitNumber(value, 1, 3);
- break;
- default:
- }
+ // switch (name) {
+ // case "triggerCount":
+ // value = limitNumber(value, 1, 5);
+ // break;
+ // default:
+ // }
updateInputRule({
[name]: value,
});
@@ -46,6 +49,7 @@ export default function InputSetting() {
toLang,
triggerShortcut,
triggerCount,
+ transSign,
} = inputRule;
return (
@@ -112,6 +116,23 @@ export default function InputSetting() {
))}
+
+
+ {OPT_INPUT_TRANS_SIGNS.map((item) => (
+
+ ))}
+
+