diff --git a/src/components/cards/PluginCard.vue b/src/components/cards/PluginCard.vue
index 2030c4b8..04bd23e2 100644
--- a/src/components/cards/PluginCard.vue
+++ b/src/components/cards/PluginCard.vue
@@ -257,8 +257,8 @@ function configDone() {
function showPluginClone() {
cloneForm.value = {
suffix: '',
- name: `${props.plugin?.plugin_name} 分身`,
- description: `${props.plugin?.plugin_desc} (分身版本)`,
+ name: t('plugin.cloneDefaultName', { name: props.plugin?.plugin_name }),
+ description: t('plugin.cloneDefaultDescription', { description: props.plugin?.plugin_desc }),
version: props.plugin?.plugin_version || '1.0',
icon: props.plugin?.plugin_icon || ''
}
@@ -268,13 +268,13 @@ function showPluginClone() {
// 执行插件分身
async function executePluginClone() {
if (!cloneForm.value.suffix.trim()) {
- $toast.error('请输入分身后缀')
+ $toast.error(t('plugin.suffixRequired'))
return
}
try {
progressDialog.value = true
- progressText.value = `正在创建 ${props.plugin?.plugin_name} 的分身...`
+ progressText.value = t('plugin.cloning', { name: props.plugin?.plugin_name })
const result: { [key: string]: any } = await api.post(`plugin/clone/${props.plugin?.id}`, {
suffix: cloneForm.value.suffix.trim(),
@@ -287,16 +287,16 @@ async function executePluginClone() {
progressDialog.value = false
if (result.success) {
- $toast.success(`插件分身 ${cloneForm.value.name} 创建成功!`)
+ $toast.success(t('plugin.cloneSuccess', { name: cloneForm.value.name }))
pluginCloneDialog.value = false
// 通知父组件刷新
emit('remove')
} else {
- $toast.error(`插件分身创建失败:${result.message}`)
+ $toast.error(t('plugin.cloneFailed', { message: result.message }))
}
} catch (error) {
progressDialog.value = false
- $toast.error('插件分身创建失败')
+ $toast.error(t('plugin.cloneFailedGeneral'))
console.error(error)
}
}
@@ -322,7 +322,7 @@ const dropdownItems = ref([
},
},
{
- title: '插件分身',
+ title: t('plugin.clone'),
value: 8,
show: true,
props: {
@@ -547,8 +547,8 @@ watch(
-
🎭 创建插件分身
-
为 {{ props.plugin?.plugin_name }} 创建独立的分身实例
+
🎭 {{ t('plugin.cloneTitle') }}
+
{{ t('plugin.cloneSubtitle', { name: props.plugin?.plugin_name }) }}
@@ -564,7 +564,7 @@ watch(
icon="mdi-information-outline"
>
- 插件分身功能:创建插件的独立副本,拥有独立的配置和数据,适用于多账号、测试环境等场景
+ {{ t('plugin.cloneFeature') }}:{{ t('plugin.cloneDescription') }}
@@ -573,14 +573,14 @@ watch(
@@ -601,9 +601,9 @@ watch(
@@ -624,9 +624,9 @@ watch(
@@ -642,7 +642,7 @@ watch(
icon="mdi-alert-circle-outline"
>
- 注意:分身插件创建后默认为禁用状态,需要手动配置启用。分身后缀一旦确定无法修改。
+ {{ t('common.notice') }}:{{ t('plugin.cloneNotice') }}
@@ -657,7 +657,7 @@ watch(
@click="pluginCloneDialog = false"
variant="outlined"
>
- 取消
+ {{ t('common.cancel') }}
- 创建分身
+ {{ t('plugin.createClone') }}
diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts
index 10fca431..8e0be8de 100644
--- a/src/locales/en-US.ts
+++ b/src/locales/en-US.ts
@@ -39,6 +39,7 @@ export default {
unsubscribe: 'Unsubscribe',
media: 'Media',
unknown: 'Unknown',
+ notice: 'Notice',
},
mediaType: {
movie: 'Movie',
@@ -2013,6 +2014,37 @@ export default {
folderName: 'Folder Name',
cancel: 'Cancel',
create: 'Create',
+ clone: 'Plugin Clone',
+ cloneTitle: 'Create Plugin Clone',
+ cloneSubtitle: 'Create an independent clone instance for {name}',
+ cloneFeature: 'Plugin Clone Feature',
+ cloneDescription: 'Create an independent copy of the plugin with separate configuration and data, suitable for multi-account, testing environments, etc.',
+ suffix: 'Clone Suffix',
+ suffixPlaceholder: 'e.g.: Test, Backup, Site1',
+ suffixHint: 'Unique identifier to distinguish clones, only letters and numbers allowed',
+ suffixRequired: 'Clone suffix cannot be empty',
+ suffixFormatError: 'Only letters and numbers allowed',
+ suffixLengthError: 'Length cannot exceed 20 characters',
+ cloneName: 'Clone Name',
+ cloneNamePlaceholder: 'e.g.: Auto Backup Test Version',
+ cloneNameHint: 'Display name for the clone plugin (optional)',
+ cloneDefaultName: '{name} Clone',
+ cloneDescriptionLabel: 'Clone Description',
+ cloneDescriptionPlaceholder: 'Describe the purpose and features of this clone...',
+ cloneDescriptionHint: 'Detailed description of the clone plugin purpose (optional)',
+ cloneDefaultDescription: '{description} (Clone Version)',
+ cloneVersion: 'Version',
+ cloneVersionPlaceholder: 'e.g.: 1.0, 2.1.0',
+ cloneVersionHint: 'Custom version number for the clone plugin (optional)',
+ cloneIcon: 'Icon URL',
+ cloneIconPlaceholder: 'https://example.com/icon.png',
+ cloneIconHint: 'Custom icon for the clone plugin (optional)',
+ cloneNotice: 'Clone plugins are disabled by default after creation and need to be manually configured and enabled. The clone suffix cannot be modified once set.',
+ createClone: 'Create Clone',
+ cloning: 'Creating clone for {name}...',
+ cloneSuccess: 'Plugin clone {name} created successfully!',
+ cloneFailed: 'Plugin clone creation failed: {message}',
+ cloneFailedGeneral: 'Plugin clone creation failed',
},
profile: {
personalInfo: 'Personal Information',
diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts
index 354006cf..e0c43258 100644
--- a/src/locales/zh-CN.ts
+++ b/src/locales/zh-CN.ts
@@ -39,6 +39,7 @@ export default {
unsubscribe: '取消订阅',
media: '媒体',
unknown: '未知',
+ notice: '注意',
},
mediaType: {
movie: '电影',
@@ -1989,14 +1990,37 @@ export default {
folderName: '文件夹名称',
cancel: '取消',
create: '创建',
- clonePluginTitle: '创建插件分身 - {name}',
+ clone: '插件分身',
+ cloneTitle: '创建插件分身',
+ cloneSubtitle: '为 {name} 创建独立的分身实例',
+ cloneFeature: '插件分身功能',
+ cloneDescription: '创建插件的独立副本,拥有独立的配置和数据,适用于多账号、测试环境等场景',
suffix: '分身后缀',
- description: '描述',
- clone: '创建分身',
- suffixPlaceholder: '例如:Clone1, Test, Backup',
- namePlaceholder: '分身插件的显示名称',
- descriptionPlaceholder: '分身插件的描述信息',
+ suffixPlaceholder: '例如:Test、Backup、Site1',
+ suffixHint: '用于区分分身的唯一标识,只能包含英文字母和数字',
suffixRequired: '分身后缀不能为空',
+ suffixFormatError: '只能包含英文字母和数字',
+ suffixLengthError: '长度不能超过20个字符',
+ cloneName: '分身名称',
+ cloneNamePlaceholder: '例如:自动备份 测试版',
+ cloneNameHint: '分身插件的显示名称(可选)',
+ cloneDefaultName: '{name} 分身',
+ cloneDescriptionLabel: '分身描述',
+ cloneDescriptionPlaceholder: '描述这个分身的用途和特点...',
+ cloneDescriptionHint: '详细描述分身插件的用途(可选)',
+ cloneDefaultDescription: '{description} (分身版本)',
+ cloneVersion: '版本号',
+ cloneVersionPlaceholder: '例如:1.0、2.1.0',
+ cloneVersionHint: '自定义分身插件的版本号(可选)',
+ cloneIcon: '图标URL',
+ cloneIconPlaceholder: 'https://example.com/icon.png',
+ cloneIconHint: '自定义分身插件的图标(可选)',
+ cloneNotice: '分身插件创建后默认为禁用状态,需要手动配置启用。分身后缀一旦确定无法修改。',
+ createClone: '创建分身',
+ cloning: '正在创建 {name} 的分身...',
+ cloneSuccess: '插件分身 {name} 创建成功!',
+ cloneFailed: '插件分身创建失败:{message}',
+ cloneFailedGeneral: '插件分身创建失败',
},
profile: {
personalInfo: '个人信息',
diff --git a/src/locales/zh-TW.ts b/src/locales/zh-TW.ts
index e66b58ff..1b3249fb 100644
--- a/src/locales/zh-TW.ts
+++ b/src/locales/zh-TW.ts
@@ -39,6 +39,7 @@ export default {
unsubscribe: '取消訂閱',
media: '媒體',
unknown: '未知',
+ notice: '注意',
},
mediaType: {
movie: '電影',
@@ -1990,6 +1991,37 @@ export default {
folderName: '文件夾名稱',
cancel: '取消',
create: '創建',
+ clone: '插件分身',
+ cloneTitle: '創建插件分身',
+ cloneSubtitle: '為 {name} 創建獨立的分身實例',
+ cloneFeature: '插件分身功能',
+ cloneDescription: '創建插件的獨立副本,擁有獨立的配置和數據,適用於多賬號、測試環境等場景',
+ suffix: '分身後綴',
+ suffixPlaceholder: '例如:Test、Backup、Site1',
+ suffixHint: '用於區分分身的唯一標識,只能包含英文字母和數字',
+ suffixRequired: '分身後綴不能為空',
+ suffixFormatError: '只能包含英文字母和數字',
+ suffixLengthError: '長度不能超過20個字符',
+ cloneName: '分身名稱',
+ cloneNamePlaceholder: '例如:自動備份 測試版',
+ cloneNameHint: '分身插件的顯示名稱(可選)',
+ cloneDefaultName: '{name} 分身',
+ cloneDescriptionLabel: '分身描述',
+ cloneDescriptionPlaceholder: '描述這個分身的用途和特點...',
+ cloneDescriptionHint: '詳細描述分身插件的用途(可選)',
+ cloneDefaultDescription: '{description} (分身版本)',
+ cloneVersion: '版本號',
+ cloneVersionPlaceholder: '例如:1.0、2.1.0',
+ cloneVersionHint: '自定義分身插件的版本號(可選)',
+ cloneIcon: '圖標URL',
+ cloneIconPlaceholder: 'https://example.com/icon.png',
+ cloneIconHint: '自定義分身插件的圖標(可選)',
+ cloneNotice: '分身插件創建後默認為禁用狀態,需要手動配置啟用。分身後綴一旦確定無法修改。',
+ createClone: '創建分身',
+ cloning: '正在創建 {name} 的分身...',
+ cloneSuccess: '插件分身 {name} 創建成功!',
+ cloneFailed: '插件分身創建失敗:{message}',
+ cloneFailedGeneral: '插件分身創建失敗',
},
profile: {
personalInfo: '個人信息',