fix: i18n menu command for userscript

This commit is contained in:
Gabe Yuan
2024-04-20 15:54:41 +08:00
parent de1ddf2362
commit d622db0d7c
5 changed files with 38 additions and 8 deletions

View File

@@ -140,6 +140,7 @@ function showTransbox({
tranboxSetting = DEFAULT_TRANBOX_SETTING, tranboxSetting = DEFAULT_TRANBOX_SETTING,
transApis, transApis,
darkMode, darkMode,
uiLang,
}) { }) {
if (!tranboxSetting?.transOpen) { if (!tranboxSetting?.transOpen) {
return; return;
@@ -170,6 +171,7 @@ function showTransbox({
contextMenuType={contextMenuType} contextMenuType={contextMenuType}
tranboxSetting={tranboxSetting} tranboxSetting={tranboxSetting}
transApis={transApis} transApis={transApis}
uiLang={uiLang}
/> />
</CacheProvider> </CacheProvider>
</React.StrictMode> </React.StrictMode>

View File

@@ -845,4 +845,20 @@ export const I18N = {
zh: `自定义选项`, zh: `自定义选项`,
en: `Custom Option`, en: `Custom Option`,
}, },
translate_selected_text: {
zh: `翻译选中文字`,
en: `Translate Selected Text`,
},
toggle_style: {
zh: `切换样式`,
en: `Toggle Style`,
},
open_menu: {
zh: `打开弹窗菜单`,
en: `Open Popup Menu`,
},
open_setting: {
zh: `打开设置`,
en: `Open Setting`,
},
}; };

View File

@@ -2,6 +2,14 @@ import { useSetting } from "./Setting";
import { I18N, URL_RAW_PREFIX } from "../config"; import { I18N, URL_RAW_PREFIX } from "../config";
import { useFetch } from "./Fetch"; import { useFetch } from "./Fetch";
export const getI18n = (uiLang, key, defaultText = "") => {
return I18N?.[key]?.[uiLang] ?? defaultText;
};
export const useLangMap = (uiLang) => {
return (key, defaultText = "") => getI18n(uiLang, key, defaultText);
};
/** /**
* 多语言 hook * 多语言 hook
* @returns * @returns
@@ -10,7 +18,7 @@ export const useI18n = () => {
const { const {
setting: { uiLang }, setting: { uiLang },
} = useSetting(); } = useSetting();
return (key, defaultText = "") => I18N?.[key]?.[uiLang] ?? defaultText; return useLangMap(uiLang);
}; };
export const useI18nMd = (key) => { export const useI18nMd = (key) => {

View File

@@ -22,6 +22,7 @@ import {
import { shortcutRegister } from "../../libs/shortcut"; import { shortcutRegister } from "../../libs/shortcut";
import { sendIframeMsg } from "../../libs/iframe"; import { sendIframeMsg } from "../../libs/iframe";
import { kissLog } from "../../libs/log"; import { kissLog } from "../../libs/log";
import { getI18n } from "../../hooks/I18n";
export default function Action({ translator, fab }) { export default function Action({ translator, fab }) {
const fabWidth = 40; const fabWidth = 40;
@@ -96,11 +97,11 @@ export default function Action({ translator, fab }) {
// 注册菜单 // 注册菜单
try { try {
const menuCommandIds = []; const menuCommandIds = [];
const { contextMenuType } = translator.setting; const { contextMenuType, uiLang } = translator.setting;
contextMenuType !== 0 && contextMenuType !== 0 &&
menuCommandIds.push( menuCommandIds.push(
GM.registerMenuCommand( GM.registerMenuCommand(
"Toggle Translate", getI18n(uiLang, "translate_switch"),
(event) => { (event) => {
translator.toggle(); translator.toggle();
sendIframeMsg(MSG_TRANS_TOGGLE); sendIframeMsg(MSG_TRANS_TOGGLE);
@@ -109,7 +110,7 @@ export default function Action({ translator, fab }) {
"Q" "Q"
), ),
GM.registerMenuCommand( GM.registerMenuCommand(
"Toggle Style", getI18n(uiLang, "toggle_style"),
(event) => { (event) => {
translator.toggleStyle(); translator.toggleStyle();
sendIframeMsg(MSG_TRANS_TOGGLE_STYLE); sendIframeMsg(MSG_TRANS_TOGGLE_STYLE);
@@ -118,14 +119,14 @@ export default function Action({ translator, fab }) {
"C" "C"
), ),
GM.registerMenuCommand( GM.registerMenuCommand(
"Open Menu", getI18n(uiLang, "open_menu"),
(event) => { (event) => {
setShowPopup((pre) => !pre); setShowPopup((pre) => !pre);
}, },
"K" "K"
), ),
GM.registerMenuCommand( GM.registerMenuCommand(
"Open Setting", getI18n(uiLang, "open_setting"),
(event) => { (event) => {
window.open(process.env.REACT_APP_OPTIONSPAGE, "_blank"); window.open(process.env.REACT_APP_OPTIONSPAGE, "_blank");
}, },

View File

@@ -13,11 +13,13 @@ import {
} from "../../config"; } from "../../config";
import { isMobile } from "../../libs/mobile"; import { isMobile } from "../../libs/mobile";
import { kissLog } from "../../libs/log"; import { kissLog } from "../../libs/log";
import { useLangMap } from "../../hooks/I18n";
export default function Slection({ export default function Slection({
contextMenuType, contextMenuType,
tranboxSetting, tranboxSetting,
transApis, transApis,
uiLang,
}) { }) {
const { const {
hideTranBtn = false, hideTranBtn = false,
@@ -37,6 +39,7 @@ export default function Slection({
? 200 ? 200
: limitNumber(window.innerHeight, 200, 400); : limitNumber(window.innerHeight, 200, 400);
const langMap = useLangMap(uiLang);
const [showBox, setShowBox] = useState(false); const [showBox, setShowBox] = useState(false);
const [showBtn, setShowBtn] = useState(false); const [showBtn, setShowBtn] = useState(false);
const [selectedText, setSelText] = useState(""); const [selectedText, setSelText] = useState("");
@@ -146,7 +149,7 @@ export default function Slection({
contextMenuType !== 0 && contextMenuType !== 0 &&
menuCommandIds.push( menuCommandIds.push(
GM.registerMenuCommand( GM.registerMenuCommand(
"Translate Selected Text", langMap("translate_selected_text"),
(event) => { (event) => {
handleTranbox(); handleTranbox();
}, },
@@ -162,7 +165,7 @@ export default function Slection({
} catch (err) { } catch (err) {
kissLog(err, "registerMenuCommand"); kissLog(err, "registerMenuCommand");
} }
}, [handleTranbox, contextMenuType]); }, [handleTranbox, contextMenuType, langMap]);
useEffect(() => { useEffect(() => {
if (hideClickAway) { if (hideClickAway) {