From f5a784e5619dda3e81ca1771650a3edf1e1520c3 Mon Sep 17 00:00:00 2001
From: Christian Byrne
Date: Tue, 20 Jan 2026 15:52:40 -0800
Subject: [PATCH] fix: add plurilization to node pack count in custom node
manager dialog (#8191)
---
src/locales/en/main.json | 1 +
.../manager/packCard/PackCard.test.ts | 25 ++++++++++++++++---
.../components/manager/packCard/PackCard.vue | 9 ++++---
3 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/src/locales/en/main.json b/src/locales/en/main.json
index fa557ee96..e87121414 100644
--- a/src/locales/en/main.json
+++ b/src/locales/en/main.json
@@ -158,6 +158,7 @@
"choose_file_to_upload": "choose file to upload",
"capture": "capture",
"nodes": "Nodes",
+ "nodesCount": "{count} nodes | {count} node | {count} nodes",
"community": "Community",
"all": "All",
"versionMismatchWarning": "Version Compatibility Warning",
diff --git a/src/workbench/extensions/manager/components/manager/packCard/PackCard.test.ts b/src/workbench/extensions/manager/components/manager/packCard/PackCard.test.ts
index 3e5116739..b3a92e5a3 100644
--- a/src/workbench/extensions/manager/components/manager/packCard/PackCard.test.ts
+++ b/src/workbench/extensions/manager/components/manager/packCard/PackCard.test.ts
@@ -10,15 +10,22 @@ import type {
RegistryPack
} from '@/workbench/extensions/manager/types/comfyManagerTypes'
+const translateMock = vi.hoisted(() =>
+ vi.fn((key: string, choice?: number) =>
+ typeof choice === 'number' ? `${key}-${choice}` : key
+ )
+)
+const dateMock = vi.hoisted(() => vi.fn(() => '2024. 1. 1.'))
+
// Mock dependencies
vi.mock('vue-i18n', () => ({
useI18n: vi.fn(() => ({
- d: vi.fn(() => '2024. 1. 1.'),
- t: vi.fn((key: string) => key)
+ d: dateMock,
+ t: translateMock
})),
createI18n: vi.fn(() => ({
global: {
- t: vi.fn((key: string) => key),
+ t: translateMock,
te: vi.fn(() => true)
}
}))
@@ -187,6 +194,18 @@ describe('PackCard', () => {
// Should still render without errors
expect(wrapper.exists()).toBe(true)
})
+
+ it('should use localized singular/plural nodes label', () => {
+ const packWithNodes = {
+ ...mockNodePack,
+ comfy_nodes: ['node-a']
+ } as MergedNodePack
+
+ const wrapper = createWrapper({ nodePack: packWithNodes })
+
+ expect(wrapper.text()).toContain('g.nodesCount-1')
+ expect(translateMock).toHaveBeenCalledWith('g.nodesCount', 1)
+ })
})
describe('component structure', () => {
diff --git a/src/workbench/extensions/manager/components/manager/packCard/PackCard.vue b/src/workbench/extensions/manager/components/manager/packCard/PackCard.vue
index 6900e71df..17ffdd102 100644
--- a/src/workbench/extensions/manager/components/manager/packCard/PackCard.vue
+++ b/src/workbench/extensions/manager/components/manager/packCard/PackCard.vue
@@ -36,8 +36,8 @@
-
- {{ nodesCount }} {{ $t('g.nodes') }}
+
+ {{ nodesLabel }}
()
-const { d } = useI18n()
+const { d, t } = useI18n()
const colorPaletteStore = useColorPaletteStore()
const isLightTheme = computed(
@@ -115,6 +115,9 @@ const isDisabled = computed(
const nodesCount = computed(() =>
isMergedNodePack(nodePack) ? nodePack.comfy_nodes?.length : undefined
)
+const nodesLabel = computed(() =>
+ nodesCount.value ? t('g.nodesCount', nodesCount.value) : ''
+)
const publisherName = computed(() => {
if (!nodePack) return null