feat: 连接相关提示信息国际化
- 右键连接: 成功/失败弹出 ElMessage 提示 - 测试连接: testSuccess/testFailed 替换硬编码 - 保存连接: created/updated/saveFailed 替换硬编码 - 导入/导出: exported/imported/importTitle 替换硬编码 - connection store: serverInfoUnavailable/connectFailed 国际化 - 新增 11 个 i18n key (5 语言): hostRequired, nameHostRequired, connectSuccess, connectFailed, created, updated, saveFailed, exported, importTitle, imported, serverInfoUnavailable
This commit is contained in:
@@ -31,9 +31,19 @@ function closeCtxMenu() {
|
||||
ctxMenu.value.visible = false
|
||||
}
|
||||
|
||||
function ctxConnect() {
|
||||
if (ctxMenu.value.conn) connStore.connect(ctxMenu.value.conn)
|
||||
async function ctxConnect() {
|
||||
if (!ctxMenu.value.conn) return
|
||||
closeCtxMenu()
|
||||
try {
|
||||
await connStore.connect(ctxMenu.value.conn)
|
||||
if (connStore.error) {
|
||||
ElMessage.error(connStore.error || t('connection.connectFailed'))
|
||||
} else {
|
||||
ElMessage.success(t('connection.connectSuccess'))
|
||||
}
|
||||
} catch (err: any) {
|
||||
ElMessage.error(err.message || t('connection.connectFailed'))
|
||||
}
|
||||
}
|
||||
|
||||
function ctxDisconnect() {
|
||||
@@ -140,7 +150,7 @@ async function handleExport() {
|
||||
a.download = `jredis-connections-${new Date().toISOString().slice(0, 10)}.json`
|
||||
a.click()
|
||||
URL.revokeObjectURL(url)
|
||||
ElMessage.success('Connections exported')
|
||||
ElMessage.success(t('connection.exported'))
|
||||
} catch (err: any) {
|
||||
ElMessage.error(err.message)
|
||||
}
|
||||
@@ -149,12 +159,12 @@ async function handleExport() {
|
||||
async function handleImport() {
|
||||
try {
|
||||
const result = await window.electronAPI.dialog.openFile({
|
||||
title: 'Import Connections',
|
||||
title: t('connection.importTitle'),
|
||||
filters: [{ name: 'JSON', extensions: ['json'] }],
|
||||
})
|
||||
if (result) {
|
||||
const count = await connStore.importConnections(result.content)
|
||||
ElMessage.success(`Imported ${count} connection(s)`)
|
||||
ElMessage.success(t('connection.imported', { n: count }))
|
||||
await connStore.loadConnections()
|
||||
}
|
||||
} catch (err: any) {
|
||||
|
||||
@@ -134,7 +134,7 @@ async function selectTlsKeyFile() {
|
||||
|
||||
async function handleTest() {
|
||||
if (!form.host.trim()) {
|
||||
ElMessage.warning('Host is required')
|
||||
ElMessage.warning(t('connection.hostRequired'))
|
||||
return
|
||||
}
|
||||
testing.value = true
|
||||
@@ -164,9 +164,9 @@ async function handleTest() {
|
||||
sshPassphrase: form.sshPassphrase,
|
||||
} as any)
|
||||
if (result.success) {
|
||||
ElMessage.success('Connection successful')
|
||||
ElMessage.success(t('connection.testSuccess'))
|
||||
} else {
|
||||
ElMessage.error(result.error || 'Connection failed')
|
||||
ElMessage.error(result.error || t('connection.testFailed'))
|
||||
}
|
||||
} finally {
|
||||
testing.value = false
|
||||
@@ -175,7 +175,7 @@ async function handleTest() {
|
||||
|
||||
async function handleSave() {
|
||||
if (!form.name.trim() || !form.host.trim()) {
|
||||
ElMessage.warning('Name and host are required')
|
||||
ElMessage.warning(t('connection.nameHostRequired'))
|
||||
return
|
||||
}
|
||||
saving.value = true
|
||||
@@ -211,10 +211,10 @@ async function handleSave() {
|
||||
createdAt: props.connection?.createdAt ?? Date.now(),
|
||||
}
|
||||
await connStore.saveConnection(conn)
|
||||
ElMessage.success(isEdit.value ? 'Connection updated' : 'Connection created')
|
||||
ElMessage.success(isEdit.value ? t('connection.updated') : t('connection.created'))
|
||||
close()
|
||||
} catch (err: any) {
|
||||
ElMessage.error(err.message || 'Failed to save connection')
|
||||
ElMessage.error(err.message || t('connection.saveFailed'))
|
||||
} finally {
|
||||
saving.value = false
|
||||
}
|
||||
|
||||
@@ -74,6 +74,17 @@ export default {
|
||||
duplicate: 'Duplizieren',
|
||||
setColor: 'Farbe festlegen',
|
||||
duplicated: 'Verbindung dupliziert',
|
||||
hostRequired: 'Host ist erforderlich',
|
||||
nameHostRequired: 'Name und Host sind erforderlich',
|
||||
connectSuccess: 'Verbunden',
|
||||
connectFailed: 'Verbindung fehlgeschlagen',
|
||||
created: 'Verbindung erstellt',
|
||||
updated: 'Verbindung aktualisiert',
|
||||
saveFailed: 'Verbindung konnte nicht gespeichert werden',
|
||||
exported: 'Verbindungen exportiert',
|
||||
importTitle: 'Verbindungen importieren',
|
||||
imported: '{n} Verbindung(en) importiert',
|
||||
serverInfoUnavailable: 'Verbindung hergestellt, aber Serverinformationen nicht verfügbar',
|
||||
},
|
||||
key: {
|
||||
title: 'Schlüssel',
|
||||
|
||||
@@ -74,6 +74,17 @@ export default {
|
||||
duplicate: 'Duplicate',
|
||||
setColor: 'Set Color',
|
||||
duplicated: 'Connection duplicated',
|
||||
hostRequired: 'Host is required',
|
||||
nameHostRequired: 'Name and host are required',
|
||||
connectSuccess: 'Connected',
|
||||
connectFailed: 'Connection failed',
|
||||
created: 'Connection created',
|
||||
updated: 'Connection updated',
|
||||
saveFailed: 'Failed to save connection',
|
||||
exported: 'Connections exported',
|
||||
importTitle: 'Import Connections',
|
||||
imported: 'Imported {n} connection(s)',
|
||||
serverInfoUnavailable: 'Connection established but server info unavailable',
|
||||
},
|
||||
key: {
|
||||
title: 'Keys',
|
||||
|
||||
@@ -74,6 +74,17 @@ export default {
|
||||
duplicate: '複製',
|
||||
setColor: '色を設定',
|
||||
duplicated: '接続が複製されました',
|
||||
hostRequired: 'ホストは必須です',
|
||||
nameHostRequired: '名前とホストは必須です',
|
||||
connectSuccess: '接続しました',
|
||||
connectFailed: '接続に失敗しました',
|
||||
created: '接続が作成されました',
|
||||
updated: '接続が更新されました',
|
||||
saveFailed: '接続の保存に失敗しました',
|
||||
exported: '接続がエクスポートされました',
|
||||
importTitle: '接続をインポート',
|
||||
imported: '{n} 個の接続をインポートしました',
|
||||
serverInfoUnavailable: '接続は確立されましたが、サーバー情報が利用できません',
|
||||
},
|
||||
key: {
|
||||
title: 'キー',
|
||||
|
||||
@@ -74,6 +74,17 @@ export default {
|
||||
duplicate: '복제',
|
||||
setColor: '색상 설정',
|
||||
duplicated: '연결이 복제되었습니다',
|
||||
hostRequired: '호스트는 필수입니다',
|
||||
nameHostRequired: '이름과 호스트는 필수입니다',
|
||||
connectSuccess: '연결됨',
|
||||
connectFailed: '연결 실패',
|
||||
created: '연결이 생성되었습니다',
|
||||
updated: '연결이 업데이트되었습니다',
|
||||
saveFailed: '연결 저장 실패',
|
||||
exported: '연결이 내보내기되었습니다',
|
||||
importTitle: '연결 가져오기',
|
||||
imported: '{n}개 연결을 가져왔습니다',
|
||||
serverInfoUnavailable: '연결이 확립되었지만 서버 정보를 사용할 수 없습니다',
|
||||
},
|
||||
key: {
|
||||
title: '키',
|
||||
|
||||
@@ -74,6 +74,17 @@ export default {
|
||||
duplicate: '复制连接',
|
||||
setColor: '设置颜色',
|
||||
duplicated: '连接已复制',
|
||||
hostRequired: '主机必填',
|
||||
nameHostRequired: '名称和主机必填',
|
||||
connectSuccess: '连接成功',
|
||||
connectFailed: '连接失败',
|
||||
created: '连接已创建',
|
||||
updated: '连接已更新',
|
||||
saveFailed: '保存连接失败',
|
||||
exported: '连接已导出',
|
||||
importTitle: '导入连接',
|
||||
imported: '已导入 {n} 个连接',
|
||||
serverInfoUnavailable: '连接已建立但服务器信息不可用',
|
||||
},
|
||||
key: {
|
||||
title: '键值',
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { ref, computed } from 'vue'
|
||||
import { useI18n } from '@renderer/i18n'
|
||||
|
||||
export interface ConnectionConfig {
|
||||
id: string
|
||||
@@ -34,6 +35,7 @@ export interface ConnectionConfig {
|
||||
}
|
||||
|
||||
export const useConnectionStore = defineStore('connection', () => {
|
||||
const { t } = useI18n()
|
||||
const connections = ref<ConnectionConfig[]>([])
|
||||
const activeId = ref<string | null>(null)
|
||||
const connectedIds = ref<string[]>([])
|
||||
@@ -138,7 +140,7 @@ export const useConnectionStore = defineStore('connection', () => {
|
||||
// leaving the renderer in a state where isConnected is true but no
|
||||
// actual Redis client exists in the main process.
|
||||
await disconnectById(conn.id)
|
||||
error.value = 'Connection established but server info unavailable'
|
||||
error.value = t('connection.serverInfoUnavailable')
|
||||
return
|
||||
}
|
||||
// Restore last selected DB for this connection
|
||||
@@ -151,7 +153,7 @@ export const useConnectionStore = defineStore('connection', () => {
|
||||
currentDb.value = lastDb
|
||||
startHealthCheck(conn.id)
|
||||
} else {
|
||||
error.value = result.error || 'Connection failed'
|
||||
error.value = result.error || t('connection.connectFailed')
|
||||
}
|
||||
} catch (err: any) {
|
||||
error.value = err.message
|
||||
|
||||
Reference in New Issue
Block a user