Comfy-Org / Comfy-Org/ComfyUI_frontend
~210+ user-facing UI strings are hardcoded in English instead of using vue-i18n t()
- Dominant language
- TypeScript
- Stars
- 2k
- Forks
- 699
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 490
Description
## Prerequisites
- [x] I am running the latest version of ComfyUI (frontend v1.45.15)
## What happened?
The project's CONTRIBUTING.md explicitly states "All user-facing strings must use vue-i18n". However, I found **~210+ UI strings** across multiple source files that are hardcoded in English instead of using `t()` / `st()` from `vue-i18n`. These strings never get translated when switching locales despite the i18n files being nearly complete (99.98%, ~8,100+ keys).
## Files with hardcoded strings (missing `t()` usage)
### 1. Menu and command labels (~105 strings, most severe)
**`src/composables/useCoreCommands.ts`**
Almost every command's `label` and `menubarLabel` property is a raw English string. These labels appear in the menubar dropdown, keyboard shortcuts dialog, and shortcuts help panel.
Examples: "New Blank Workflow", "Open Workflow", "Save Workflow", "Save Workflow As", "Export Workflow", "Undo", "Redo", "Clear Workflow", "Reset View", "Zoom In", "Zoom Out", "Queue Prompt", "Queue Prompt (Front)", "Mute/Unmute Selected Nodes", "Bypass/Unbypass Selected Nodes", "Pin/Unpin Selected Nodes", "Group Selected Nodes", "Toggle Theme (Dark/Light)", "Manager", "Help Center", "Sign Out", "Copy", "Paste", "Select All", "Delete Selected Items", "Custom Nodes Manager", ~80 more similar.
Only 3 commands use `label: () => t('...')` correctly (e.g., `Comfy.Queue.ToggleOverlay`).
### 2. Legacy UI buttons and labels (~30 strings)
**`src/scripts/ui.ts`**
All button labels are set via `textContent` with raw strings, no i18n import: "Cancel", "Delete", "Load", "Close", "Refresh", "Queue Prompt", "Queue Front", "View Queue", "View History", "Batch count", "Auto Queue", "Save", "Save (API Format)", "Clear", "Load Default", "Reset View", "Clipspace", "Queue size:"
### 3. Core extension files (~45 strings)
| File | Examples |
|---|---|
| `src/extensions/core/clipspace.ts` | "Close", "Select Image", "Clipspace is Empty!" |
| `src/extensions/core/groupNodeManage.ts` | "Visible", "Group Nodes", "Save", "Delete Group Node" |
| `src/extensions/core/groupNode.ts` | Alert and confirm dialog messages |
| `src/extensions/core/nodeTemplates.ts` | "Close", "Export", "Import", "Delete", "Manage", "Node Templates" |
| `src/extensions/core/rerouteNode.ts` | "Hide Type", "Show Type" |
| `src/extensions/core/webcamCapture.ts` | "waiting for camera...", error messages |
| `src/extensions/core/electronAdapter.ts` | "Reinstall", "Restart", "Quit" |
| `src/extensions/core/maskeditor.ts` | "Open Mask Editor for Selected Node" |
| `src/extensions/core/load3d.ts` | "upload 3d model", "clear" |
### 4. Vue components with hardcoded labels (~17 files)
Files like `UserSelectView.vue`, various widget/thumbnail components contain hardcoded labels, alt text, and placeholder text.
### 5. Other files (~20 strings)
`src/scripts/app.ts`, `src/utils/runtimeErrorMatcher.ts`, `src/schemas/workflowSchema.ts`, `src/platform/assets/services/assetService.ts` contain hardcoded error messages and validation strings.
## Steps to Reproduce
1. Set ComfyUI locale to any non-English language (e.g. 中文, 日本語, Русский)
2. Open the menubar (ComfyUI logo dropdown in top-left) - observe English-only labels
3. Open Settings > Keybindings - observe English-only command labels
4. Use legacy UI buttons (Queue, Save, Load etc.) - observe English-only text
5. Open extension management dialogs - observe English-only text
## How is this affecting you?
Minor inconvenience - the i18n infrastructure and translation files are comprehensive (~8,100+ keys, 99.98% complete), but ~210+ source-level strings bypass the system entirely, leaving many UI elements untranslated for non-English users.
## ComfyUI Frontend Version
1.45.15
## Browser
Chrome/Chromium
Contributor guide
Research direction
Start with CONTRIBUTING.md and reproduce the untranslated labels using a non-English locale. Audit the named entry points, including src/composables/useCoreCommands.ts, src/scripts/ui.ts, the core extension files, Vue components, and other listed files. Done means the identified user-facing strings use the existing vue-i18n t()/st() approach and the affected menus, dialogs, buttons, and validation messages are translated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, internationalization
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100