diff --git a/src/locales/en/main.json b/src/locales/en/main.json index d3a34c8f1..813376c73 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -131,6 +131,11 @@ "newFolder": "New Folder", "enableAll": "Enable All", "disableAll": "Disable All", + "enableSelected": "Enable Selected", + "disableSelected": "Disable Selected", + "disableThirdParty": "Disable Third-Party", + "core": "Core", + "custom": "Custom", "command": "Command", "keybinding": "Keybinding", "upload": "Upload", diff --git a/src/platform/settings/components/ExtensionPanel.vue b/src/platform/settings/components/ExtensionPanel.vue index 92be564f5..dd76469ea 100644 --- a/src/platform/settings/components/ExtensionPanel.vue +++ b/src/platform/settings/components/ExtensionPanel.vue @@ -30,7 +30,12 @@
- +
- + >([]) +const { t } = useI18n() + +const filterTypeKeys = ['all', 'core', 'custom'] as const +type FilterTypeKey = (typeof filterTypeKeys)[number] +const filterTypes = computed(() => + filterTypeKeys.map((key) => ({ + label: t(`g.${key}`), + value: key + })) +) +const filterType = ref('all') +const selectedExtensions = ref([]) const filters = ref({ global: { value: '', matchMode: FilterMatchMode.CONTAINS } @@ -112,11 +128,11 @@ const editingEnabledExtensions = ref>({}) const filteredExtensions = computed(() => { const extensions = extensionStore.extensions switch (filterType.value) { - case 'Core': + case 'core': return extensions.filter((ext) => extensionStore.isCoreExtension(ext.name) ) - case 'Custom': + case 'custom': return extensions.filter( (ext) => !extensionStore.isCoreExtension(ext.name) ) @@ -190,9 +206,9 @@ const applyChanges = () => { } const menu = ref>() -const contextMenuItems = [ +const contextMenuItems = computed(() => [ { - label: 'Enable Selected', + label: t('g.enableSelected'), icon: 'pi pi-check', command: async () => { selectedExtensions.value.forEach((ext) => { @@ -204,7 +220,7 @@ const contextMenuItems = [ } }, { - label: 'Disable Selected', + label: t('g.disableSelected'), icon: 'pi pi-times', command: async () => { selectedExtensions.value.forEach((ext) => { @@ -219,20 +235,20 @@ const contextMenuItems = [ separator: true }, { - label: 'Enable All', + label: t('g.enableAll'), icon: 'pi pi-check', command: enableAllExtensions }, { - label: 'Disable All', + label: t('g.disableAll'), icon: 'pi pi-times', command: disableAllExtensions }, { - label: 'Disable 3rd Party', + label: t('g.disableThirdParty'), icon: 'pi pi-times', command: disableThirdPartyExtensions, disabled: !extensionStore.hasThirdPartyExtensions } -] +]) diff --git a/src/platform/workflow/templates/repositories/workflowTemplatesStore.ts b/src/platform/workflow/templates/repositories/workflowTemplatesStore.ts index 5ea52c8ed..9759c029d 100644 --- a/src/platform/workflow/templates/repositories/workflowTemplatesStore.ts +++ b/src/platform/workflow/templates/repositories/workflowTemplatesStore.ts @@ -334,19 +334,18 @@ export const useWorkflowTemplatesStore = defineStore( }) // 2. Basics (isEssential categories) - always second if it exists - let gettingStartedText = 'Getting Started' const essentialCat = coreTemplates.value.find( (cat) => cat.isEssential && cat.templates.length > 0 ) - const hasEssentialCategories = Boolean(essentialCat) if (essentialCat) { - gettingStartedText = essentialCat.title - } - if (hasEssentialCategories) { + const categoryTitle = essentialCat.title ?? 'Getting Started' items.push({ id: 'basics', - label: gettingStartedText, + label: st( + `templateWorkflows.category.${normalizeI18nKey(categoryTitle)}`, + categoryTitle + ), icon: 'icon-[lucide--graduation-cap]' }) }