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]'
})
}