fix: render modal Confirm/Cancel buttons in all locales

Route button labels through the project's vue-i18n; the upstream
fallback only knew en/zh and crashed the footer in de/es/fr/ja/ko.

Signed-off-by: GL.iNet-Yongping.Xie <yongping.xie@gl-inet.com>
This commit is contained in:
GL.iNet-Yongping.Xie
2026-04-22 21:00:20 -07:00
parent 6e85756350
commit 53b7ee4e9e
30 changed files with 68 additions and 24 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
package server
const RttysVersion = "5.2.0"
const KVMCloudVersion = "v2.5.0"
const KVMCloudVersion = "v2.6.0"
var (
GitCommit = ""
+31
View File
@@ -0,0 +1,31 @@
<!--
* @Description: Wraps gl-web-main's BaseModal with project-i18n defaults for
* okText / cancelText. The upstream BaseModal falls back to its own internal
* i18n table when these props are omitted, but that table only contains
* zh/en — any other locale throws at render time and the entire footer slot
* fails to mount, so Confirm/Cancel buttons disappear in de/es/fr/ja/ko.
* Defaulting the props here routes labels through the project's vue-i18n,
* which knows every supported locale.
-->
<template>
<BaseModal
:cancelText="cancelText"
:okText="okText"
>
<template v-for="(_, name) in $slots" #[name]="slotData">
<slot :name="name" v-bind="slotData || {}" />
</template>
</BaseModal>
</template>
<script setup lang="ts">
import { BaseModal } from 'gl-web-main/components'
withDefaults(defineProps<{
okText?: string
cancelText?: string
}>(), {
okText: 'common.confirm',
cancelText: 'common.cancel',
})
</script>
+1
View File
@@ -12,6 +12,7 @@
"success": "Erfolgreich",
"failed": "Fehlgeschlagen",
"cancel": "Abbrechen",
"confirm": "Bestätigen",
"ok": "OK",
"close": "Schließen",
"about": "Über",
+1
View File
@@ -12,6 +12,7 @@
"success": "Success",
"failed": "Failed",
"cancel": "Cancel",
"confirm": "Confirm",
"ok": "OK",
"close": "Close",
"about": "About",
+1
View File
@@ -12,6 +12,7 @@
"success": "Éxito",
"failed": "Error",
"cancel": "Cancelar",
"confirm": "Confirmar",
"ok": "Aceptar",
"close": "Cerrar",
"about": "Acerca de",
+1
View File
@@ -12,6 +12,7 @@
"success": "Succès",
"failed": "Échec",
"cancel": "Annuler",
"confirm": "Confirmer",
"ok": "OK",
"close": "Fermer",
"about": "À propos",
+1
View File
@@ -12,6 +12,7 @@
"success": "成功",
"failed": "失敗",
"cancel": "キャンセル",
"confirm": "確認",
"ok": "OK",
"close": "閉じる",
"about": "このサービスについて",
+1
View File
@@ -12,6 +12,7 @@
"success": "성공",
"failed": "실패",
"cancel": "취소",
"confirm": "확인",
"ok": "확인",
"close": "닫기",
"about": "정보",
+1
View File
@@ -12,6 +12,7 @@
"success": "成功",
"failed": "失败",
"cancel": "取消",
"confirm": "确认",
"ok": "确定",
"close": "关闭",
"about": "关于",
@@ -41,7 +41,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -41,7 +41,8 @@
<script setup lang="ts">
import { computed, reactive, watch } from 'vue'
import { BaseInfo, BaseModal, BaseRadioButtonsCompact } from 'gl-web-main/components'
import { BaseInfo, BaseRadioButtonsCompact } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { getAddDeviceScriptInfoApi } from '@/api/device'
import { copyText } from 'gl-web-main'
import { message } from 'ant-design-vue'
@@ -191,10 +192,10 @@ esac
exit 0
EOF
# 4. Add execution permissions
# 5. Add execution permissions
chmod +x "$SCRIPT_FILE"
# 5. Execute restart once
# 6. Execute restart once
"$SCRIPT_FILE" restart
`
@@ -39,7 +39,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -26,7 +26,7 @@
</template>
<script setup lang="ts">
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
const props = defineProps<{ open: boolean, type: string, res: any }>()
@@ -80,7 +80,7 @@ import BaseTable from '@/components/base/baseTable.vue'
import { t } from '@/hooks/useLanguage'
import { DeviceInfo, ExecuteCommandFormData } from '@/models/device'
import { useFakeUpgradeProgress } from 'gl-web-main'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { TableColumnType } from 'ant-design-vue'
import { computed, reactive, watch } from 'vue'
import CmdResDetailDialog from './cmdResDetailDialog.vue'
@@ -31,7 +31,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk, useValidateInfo } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -64,7 +64,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk, useValidateInfo } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { DeviceInfo, ExecuteCommandFormData } from '@/models/device'
@@ -50,7 +50,8 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseInfo, BaseModal } from 'gl-web-main/components'
import { BaseInfo } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
+1 -1
View File
@@ -44,7 +44,7 @@ import '@xterm/xterm/css/xterm.css'
import OverlayAddon from './components/xterm-addon-overlay'
import ContextMenu from './components/contextMenu.vue'
import RttyKeyboard from './components/rttyKeyboard.vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { message, Modal } from 'ant-design-vue'
import { t } from '@/hooks/useLanguage'
@@ -96,7 +96,8 @@
<script setup lang="ts">
import { computed, reactive, ref, watch } from 'vue'
import { BaseInfo, BaseModal } from 'gl-web-main/components'
import { BaseInfo } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, macAddressFormatter, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance, TableColumnType } from 'ant-design-vue'
@@ -69,7 +69,8 @@
<script setup lang="ts">
import { computed, h, reactive, watch } from 'vue'
import { BaseInfo, BaseModal } from 'gl-web-main/components'
import { BaseInfo } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { baseCustomModal, macAddressFormatter, OnBeforeOk } from 'gl-web-main'
import BaseLoadingContainer from '@/components/base/baseLoadingContainer.vue'
import { useDeviceStore } from '@/stores/modules/device'
@@ -48,7 +48,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -66,7 +66,8 @@
<script setup lang="ts">
import { computed, h, reactive, watch } from 'vue'
import { BaseInfo, BaseModal } from 'gl-web-main/components'
import { BaseInfo } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { baseCustomModal, macAddressFormatter, PageLink } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { message, TableColumnType } from 'ant-design-vue'
@@ -33,7 +33,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { FormInstance } from 'ant-design-vue'
import { reqDisable2fa } from '@/api/personal'
@@ -32,7 +32,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { FormInstance, message } from 'ant-design-vue'
import { reqUpdateProfile } from '@/api/personal'
@@ -54,7 +54,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { FormInstance } from 'ant-design-vue'
import QRCode from 'qrcode'
@@ -81,7 +81,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -41,7 +41,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance, message } from 'ant-design-vue'
@@ -41,7 +41,8 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseInfo, BaseModal } from 'gl-web-main/components'
import { BaseInfo } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance } from 'ant-design-vue'
@@ -96,7 +96,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance, Tooltip } from 'ant-design-vue'
@@ -41,7 +41,7 @@
<script setup lang="ts">
import { reactive, ref, watch } from 'vue'
import { BaseModal } from 'gl-web-main/components'
import BaseModal from '@/components/base/baseModalI18n.vue'
import { FormRules, OnBeforeOk } from 'gl-web-main'
import { t } from '@/hooks/useLanguage'
import { FormInstance, message } from 'ant-design-vue'