From f57bad890e33583cd1df655951ad672198b605ed Mon Sep 17 00:00:00 2001 From: AkiChase <1003019131@qq.com> Date: Fri, 10 May 2024 16:51:42 +0800 Subject: [PATCH] feat(i18n+Device): add i18n for Device page --- package.json | 1 + src/components/Device.vue | 64 +++++++++++++++++++++------------------ src/i18n/en.json | 41 +++++++++++++++++++++++++ src/i18n/index.ts | 19 ++++++++++++ src/i18n/zh.json | 41 +++++++++++++++++++++++++ src/main.ts | 2 ++ 6 files changed, 139 insertions(+), 29 deletions(-) create mode 100644 src/i18n/en.json create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/zh.json diff --git a/package.json b/package.json index 1d2a80a..aecef33 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@tauri-apps/plugin-store": "2.0.0-beta.2", "pinia": "^2.1.7", "vue": "^3.3.4", + "vue-i18n": "^9.13.1", "vue-router": "4" }, "devDependencies": { diff --git a/src/components/Device.vue b/src/components/Device.vue index e669559..0965d99 100644 --- a/src/components/Device.vue +++ b/src/components/Device.vue @@ -45,7 +45,9 @@ import { UnlistenFn, listen } from "@tauri-apps/api/event"; import { Store } from "@tauri-apps/plugin-store"; import { shutdown } from "../frontcommand/scrcpyMaskCmd"; import { useGlobalStore } from "../store/global"; +import { useI18n } from "vue-i18n"; +const { t } = useI18n(); const dialog = useDialog(); const store = useGlobalStore(); const message = useMessage(); @@ -105,7 +107,7 @@ const tableCols: DataTableColumns = [ key: "id", }, { - title: "Status", + title: t("pages.Device.status"), key: "status", }, ]; @@ -144,10 +146,10 @@ const tableRowProps = (_: any, index: number) => { async function shutdownSC() { dialog.warning({ - title: "Warning", - content: "确定关闭Scrcpy控制服务?", - positiveText: "确定", - negativeText: "取消", + title: t("pages.Device.shutdown.title"), + content: t("pages.Device.shutdown.content"), + positiveText: t("pages.Device.shutdown.positiveText"), + negativeText: t("pages.Device.shutdown.negativeText"), onPositiveClick: async () => { await shutdown(); store.controledDevice = null; @@ -162,11 +164,11 @@ const menuY = ref(0); const showMenu = ref(false); const menuOptions: DropdownOption[] = [ { - label: () => h("span", "控制此设备"), + label: () => h("span", t("pages.Device.menu.control")), key: "control", }, { - label: () => h("span", "获取屏幕尺寸"), + label: () => h("span", t("pages.Device.menu.screen")), key: "screen", }, ]; @@ -181,7 +183,7 @@ async function deviceControl() { } if (!(store.screenSizeW > 0) || !(store.screenSizeH > 0)) { - message.error("请正确输入当前控制设备的屏幕尺寸"); + message.error(t("pages.Device.deviceControl.inputScreenSize")); store.screenSizeW = 0; store.screenSizeH = 0; store.hideLoading(); @@ -189,7 +191,7 @@ async function deviceControl() { } if (store.controledDevice) { - message.error("请先关闭当前控制设备"); + message.error(t("pages.Device.deviceControl.closeCurDevice")); store.hideLoading(); return; } @@ -198,7 +200,7 @@ async function deviceControl() { sizeW: store.screenSizeW, sizeH: store.screenSizeH, }); - message.info("屏幕尺寸已保存,正在启动控制服务,请保持设备亮屏"); + message.info(t("pages.Device.deviceControl.controlInfo")); const device = devices.value[rowIndex]; @@ -216,7 +218,7 @@ async function deviceControl() { await shutdown(); store.controledDevice = null; store.hideLoading(); - message.error("设备连接超时"); + message.error(t("pages.Device.deviceControl.connectTimeout")); } }, 6000); @@ -239,7 +241,9 @@ async function deviceGetScreenSize() { let id = devices.value[rowIndex].id; const size = await getDeviceScreenSize(id); store.hideLoading(); - message.success(`设备屏幕尺寸为: ${size[0]} x ${size[1]}`); + message.success( + t("pages.Device.deviceGetScreenSize") + `${size[0]} x ${size[1]}` + ); } async function onMenuSelect(key: string) { @@ -264,7 +268,7 @@ async function refreshDevices() { async function connectDevice() { if (!address.value) { - message.error("请输入无线调试地址"); + message.error(t("pages.Device.inputWirelessAddress")); return; } @@ -278,51 +282,51 @@ async function connectDevice() {
- 本地端口 + {{ $t("pages.Device.localPort") }} - 无线连接 + {{ $t("pages.Device.wireless") }} - 连接 + {{ + $t("pages.Device.connect") + }} - 设备尺寸 + {{ $t("pages.Device.deviceSize.title") }} - + - + - 提示:请正确输入当前控制设备的屏幕尺寸,这是成功发送触摸事件的必要参数 - 受控设备 + {{ $t("pages.Device.deviceSize.tip") }} + {{ $t("pages.Device.controledDevice") }}
@@ -352,7 +356,9 @@ async function connectDevice() {
- 可用设备 + {{ + $t("pages.Device.availableDevice") + }} ("language")) ?? "en"; + +const i18n = createI18n({ + locale: language, + allowComposition: true, + messages: { + en, + zh, + }, +}); + +export default i18n; diff --git a/src/i18n/zh.json b/src/i18n/zh.json new file mode 100644 index 0000000..fb72c63 --- /dev/null +++ b/src/i18n/zh.json @@ -0,0 +1,41 @@ +{ + "pages": { + "Device": { + "status": "状态", + "shutdown": { + "title": "警告", + "content": "确定关闭Scrcpy控制服务?", + "positiveText": "确定", + "negativeText": "取消" + }, + "menu": { + "control": "控制此设备", + "screen": "获取屏幕尺寸" + }, + "deviceControl": { + "inputScreenSize": "请正确输入当前控制设备的屏幕尺寸", + "closeCurDevice": "请先关闭当前控制设备", + "controlInfo": "屏幕尺寸已保存,正在启动控制服务,请保持设备亮屏", + "connectTimeout": "设备连接超时" + }, + "deviceGetScreenSize": "设备屏幕尺寸为:", + "inputWirelessAddress": "请输入无线调试地址", + "localPort": "本地端口", + "localPortPlaceholder": "Scrcpy 本地端口", + "wireless": "无线连接", + "wirelessPlaceholder": "无线连接地址", + "connect": "连接", + "deviceSize": { + "title": "设备屏幕尺寸", + "width": "宽度", + "widthPlaceholder": "屏幕宽度", + "heightPlaceholder": "屏幕高度", + "height": "高度", + "tip": "提示:请正确输入当前控制设备的屏幕尺寸,这是成功发送触摸事件的必要参数" + }, + "controledDevice": "受控设备", + "noControledDevice": "无受控设备", + "availableDevice": "可用设备" + } + } +} diff --git a/src/main.ts b/src/main.ts index ea47f30..89f689e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,10 +3,12 @@ import { createPinia } from "pinia"; import "./styles.css"; import App from "./App.vue"; import router from "./router"; +import i18n from "./i18n"; const pinia = createPinia(); const app = createApp(App); app.use(router); app.use(pinia); +app.use(i18n); app.mount("#app");