mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-05-09 05:35:30 +02:00
[GH-ISSUE #1040] [Feature]: Audit and fix hardcoded user-visible strings across the frontend (i18n parity) #735
Labels
No labels
A1
automated
automated
bug
bug
Closed due to inactivity
contrib
dependencies
dependencies
duplicate
enhancement
feedback
hold
invalid
Notes
P1S
pull-request
security
security
ThumbsUp
user-report
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/bambuddy#735
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Minidoracat on GitHub (Apr 19, 2026).
Original GitHub issue: https://github.com/maziggy/bambuddy/issues/1040
Originally assigned to: @maziggy on GitHub.
Problem or Use Case
CONTRIBUTING.mdstates: "Never hardcode user-visible strings — always use translation keys." A scan of the currentfrontend/src/tree shows that rule is being violated in a lot of places — users on non-English locales see English text bleeding through even with their locale fully populated.Two independent scans:
eslint-plugin-i18next,mode: 'jsx-text-only') → 465 hardcoded JSX text nodes across 76 files.placeholder/title/aria-label/alt/throw new Error(...)→ ~100 additional attribute + error-message hits across ~40 files.Lower-bound total: ~560 occurrences across 80+ files. Actual number is likely higher (toast/alert callees and template literals not counted). Highest-density files:
pages/PrintersPage.tsx(63)pages/SettingsPage.tsx(39)pages/ArchivesPage.tsx(37)components/PrintModal/PrinterSelector.tsx(26)components/FileManagerModal.tsx(16)components/APIBrowser.tsx(14)components/TimelapseEditorModal.tsx(14)components/CompareArchivesModal.tsx(12)components/ProjectPageModal.tsx(12)components/LogViewer.tsx(11)Concrete examples:
CompareArchivesModal.tsx:53—<p>Failed to load comparison</p>APIBrowser.tsx:337—<h4>Path Parameters</h4>APIBrowser.tsx:585—<Button>Expand All</Button>AddExternalLinkModal.tsx:197—<label>Name *</label>PendingUploadsPanel.tsx:130-150—<label>Tags</label>/Notes/ProjectFileManagerModal.tsx:152—<p>All Plates</p>CalendarView.tsx:192—<div>Prints this month</div>Scan methodology is reproducible — happy to share the exact ripgrep patterns and ESLint flat-config in the first PR description if useful.
Proposed Solution
A series of scoped PRs (not one mega-PR) grouped by feature area. Each PR:
printers.*,archives.*,settings.*, …), wraps call sites withuseTranslation()+t('...').en,de,fr,it,ja,pt-BR,zh-CN,zh-TW) so the parity gate (check:i18n, already ondev) stays green.zh-CN/zh-TWnative-speaker quality from me.Rough batching I have in mind (open to reshaping — happy to collapse, split, or re-order based on what you prefer to review first):
PrintersPage,PrintModal/*,PrinterSelector,SwitchbarPopover,SmartPlugCard)ArchivesPage,CompareArchivesModal,BatchProjectModal,ProjectPageModal,ProjectDetailPage)SettingsPage,LDAPSettings,EmailSettings,OIDCProviderSettings,ExternalLinksSettings,SpoolmanSettings,TwoFactorSettings)LogViewer,TimelapseEditorModal,EmbeddedCameraViewer,PhotoGalleryModal,TagManagementModal,QRCodeModal,KeyboardShortcutsModal, …)eslint-plugin-i18next'sno-literal-stringrule (warn-level) tofrontend/eslint.config.jsso this cannot regressHappy to start with B1 as a proof-of-shape and let you decide whether to keep going before I commit to the full cleanup.
Open questions I'd appreciate your call on before I start:
APIBrowserandLogViewerbe included, or stay English-only since they're developer/diagnostic surfaces?de / fr / it / ja / pt-BR— would you prefer (a) best-effort translations from me now, or (b) placeholder entries taggedTODO-translateso native speakers can fill them in follow-up PRs?Alternatives Considered
off.Feature Category
UI/UX
Priority
Would improve my workflow
Contribution
Checklist
@maziggy commented on GitHub (Apr 20, 2026):
Oh this is awesome! Have it on my list for a long time but simly don't found the time to fix it.
Please go ahead. Thanks!!!
@maziggy commented on GitHub (Apr 29, 2026):
Funny, but I already fixed it by error :) Sorry for that.
Locale leaf counts:
en 4492 [ref]
de 4492 [locale]
fr 4492 [locale]
it 4492 [locale]
ja 4492 [locale]
pt-BR 4492 [locale]
zh-CN 4492 [locale]
zh-TW 4492 [locale]
✓ All locales in parity with en (de / fr / it / ja / pt-BR / zh-CN / zh-TW).