Skip to content

i18n: catalog remaining Studio and creative UI copy - #109

Merged
IAnMove merged 6 commits into
mainfrom
i18n/catalog-remaining-ui-copy
Sep 3, 2026
Merged

i18n: catalog remaining Studio and creative UI copy#109
IAnMove merged 6 commits into
mainfrom
i18n/catalog-remaining-ui-copy

Conversation

@IAnMove

@IAnMove IAnMove commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • move visible Studio, Character Kit, Comics, 3D, Story, Series, Director, settings, and shell copy into typed English/Spanish catalogs
  • register and validate the new namespaces while preserving technical identifiers, generated prompts, and API payloads
  • complete the interrupted work by restoring strict i18next typing and React hook dependency correctness

Validation

  • cd ui && npm run check
  • 19 EN/ES namespaces validated
  • 510 tests passed
  • ESLint passed with zero warnings
  • TypeScript/Vite production build and bundle budget passed

Recovered from the interrupted experiment/ui-information-architecture worktree without modifying or rebasing main.


Note

Low Risk
UI copy and test assertions only; behavior and API payloads are unchanged, with catalog parity enforced by existing i18n checks and updated regression tests.

Overview
Expands internationalization by adding five namespaces (studio, shell, scene3d, characters, comics), registering them in check-i18n-catalogs.mjs, and documenting them in INTERNATIONALIZATION.md.

Replaces hardcoded English across Director workflows (DirectorDashboard), app shell (intro, LAN gate, download/execution banners), Settings model browser, and many Studio sidebar / edit-mode surfaces with useUiTranslation and semantic t('…') keys. Edit sub-mode toggles switch from inline label strings to labelKey references into the catalogs.

Updates source-level Python tests so they assert components call the expected translation keys and that en/*.json still carries the former user-visible strings (e.g. studio.json, seriesLab.json, settings.json), keeping regressions tied to copy without embedding literals in TSX.

Reviewed by Cursor Bugbot for commit 1347c23. Configure here.

Move leftover visible UI copy into EN+ES catalogs (characters, comics,
studio, scene3d, shell, plus remaining storyLab notices, seriesLab forms,
director recovery/dashboard, wizard/settings/dialogs). Register the new
namespaces and retarget tests to English source strings.
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

PR Review — Loreframe Studio

Risk: medium
Scope: 136 file(s); +12577/-3433; React UI, docs

Automated review from scripts/analyze_pr.py. This is a heuristic pass (no LLM) so humans still own the merge decision.

Findings

  • medium — Dangerous dynamic execution (ui/src/components/MainContent/GalleryReadyToast.tsx)
    ui/src/components/MainContent/GalleryReadyToast.tsx adds exec(). Confirm the input is trusted and sandboxed.
  • medium — Large pull request
    12577 additions / 3433 deletions. Reviewers will have an easier time with smaller, focused PRs.
  • medium — Very large file change (ui/src/i18n/locales/en/comics.json)
    ui/src/i18n/locales/en/comics.json adds 869 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/en/scene3d.json)
    ui/src/i18n/locales/en/scene3d.json adds 853 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/en/seriesLab.json)
    ui/src/i18n/locales/en/seriesLab.json adds 406 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/en/studio.json)
    ui/src/i18n/locales/en/studio.json adds 760 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/es/comics.json)
    ui/src/i18n/locales/es/comics.json adds 869 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/es/scene3d.json)
    ui/src/i18n/locales/es/scene3d.json adds 853 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/es/seriesLab.json)
    ui/src/i18n/locales/es/seriesLab.json adds 406 lines. Consider splitting the PR.
  • medium — Very large file change (ui/src/i18n/locales/es/studio.json)
    ui/src/i18n/locales/es/studio.json adds 760 lines. Consider splitting the PR.
  • low — UI changed — rebuild before merge
    Run cd ui && npm run build (CI already does this). Pinokio Update rebuilds for end users; keep ui/dist untracked.

Changed files

  • added: ui/src/i18n/locales/en/characters.json, ui/src/i18n/locales/en/comics.json, ui/src/i18n/locales/en/scene3d.json, ui/src/i18n/locales/en/shell.json, ui/src/i18n/locales/en/studio.json, ui/src/i18n/locales/es/characters.json, ui/src/i18n/locales/es/comics.json, ui/src/i18n/locales/es/scene3d.json, ui/src/i18n/locales/es/shell.json, ui/src/i18n/locales/es/studio.json
  • modified: docs/development/INTERNATIONALIZATION.md, tests/test_h3_window_planner.py, tests/test_minimax_h3.py, tests/test_phase1_issue_fixes.py, tests/test_scail2_workflows.py, tests/test_series_lab_ui.py, tests/test_story_lab_audio_ui.py, tests/test_story_lab_trailer_ui.py, tests/test_voice_reference_settings.py, ui/scripts/check-i18n-catalogs.mjs, ui/src/components/DirectorDashboard/DirectorDashboard.tsx, ui/src/components/DownloadStatusBanner.tsx, ui/src/components/ExecutionModeBanner.tsx, ui/src/components/HocusPocusIntro.tsx, ui/src/components/LanAuthGate.tsx, ui/src/components/LoraBrowser/DownloadBar.tsx, ui/src/components/LoraBrowser/InstalledCheckpoints.tsx, ui/src/components/LoraBrowser/LoraBrowser.tsx, ui/src/components/LoraBrowser/ModelCard.tsx, ui/src/components/LoraBrowser/ModelDetail.tsx
    … and 106 more

CONTRIBUTING checklist

  • python scripts/verify_clean_repo.py
  • python -m compileall -q app/services app/launch.py scripts
  • cd ui && npm run build if the UI changed
  • No weights, CivitAI sidecars, or generated guides
  • Stays local-first (no required accounts / telemetry)

Posted by the repo PR review workflow. Re-runs on each push to the PR.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Code health

Metric Value
Production LOC 236,531
Production files 514
Test LOC 65,553
Functions measured 14,811
Functions complexity ≥ 15 774
Maximum complexity 667

Markdown, JSON catalogs and tests are out of this table. Only app/ runtime + ui/src TS/JS count.

Most complex functions

Complexity Where
667 app/wgp.py:7157 generate_video
374 ui/src/stores/useStore.ts:4412 Async method 'startGeneration'
356 app/_launch_runtime.py:23154 _run_generation
308 app/wgp.py:12274 generate_video_tab
271 ui/src/components/Sidebar/SceneAnimatorPanel.tsx:474 Function 'SceneAnimatorPanel'
266 ui/src/stores/useStore.ts:8934 Async method 'loadSettingsFromOutput'
258 app/services/director/planners/short_film.py:3433 ShortFilmPlanner._plan_story_driven
254 app/services/director_pipeline.py:13539 _run_video_generation
245 app/services/director_pipeline.py:7663 _run_pipeline
241 ui/src/features/agent/agentActions.ts:1093 Function 'parseAction'
227 ui/src/features/agent/agentActions.ts:2726 Async function 'executeAgentActions'
226 app/services/director_pipeline.py:6492 update_comic_preview

Trend vs baseline

Metric Δ
Production LOC +2,866
Test LOC +1,739
Functions ≥ 15 +0
Maximum complexity +0

Warnings

  • production LOC increased by +2,866
  • complexity hotspot ui/src/stores/useStore.ts rose 373 -> 374
  • complexity hotspot ui/src/components/Sidebar/InputsPanel.tsx rose 157 -> 162
  • complexity hotspot ui/src/components/Sidebar/PromptInput.tsx rose 68 -> 70
  • complexity hotspot ui/src/features/series/SeriesSetupPanel.tsx rose 58 -> 62
  • complexity hotspot app/services/model3d_service.py rose 51 -> 54
  • complexity hotspot ui/src/features/stories/actions.ts rose 51 -> 52
  • complexity hotspot ui/src/features/series/actions.ts rose 47 -> 50
  • complexity hotspot ui/src/components/MainContent/TabFilter.tsx rose 19 -> 23
  • complexity hotspot ui/src/features/agent/AgentAssistantPanel.tsx rose 19 -> 22
  • complexity hotspot app/services/story_library.py rose 16 -> 19
  • complexity hotspot ui/src/components/Sidebar/ControlVideoSection.tsx rose 15 -> 17
  • hotspot ui/src/features/agent/agentActions.ts increased by +57 lines
  • hotspot ui/src/components/Sidebar/SceneAnimatorPanel.tsx increased by +6 lines
  • hotspot ui/src/features/video-editor/VideoEditorPanel.tsx increased by +27 lines
  • hotspot ui/src/features/comics/ComicWorkflowPanels.tsx increased by +6 lines
  • hotspot ui/src/features/comics/ComicEditorPanel.tsx increased by +31 lines
  • hotspot ui/src/types/index.ts increased by +3 lines
  • hotspot ui/src/features/stories/actions.ts increased by +54 lines
  • hotspot app/services/series_library.py increased by +36 lines
  • hotspot app/services/model3d_service.py increased by +58 lines
  • hotspot ui/src/components/Sidebar/InputsPanel.tsx increased by +32 lines
  • hotspot ui/src/components/DirectorDashboard/DirectorDashboard.tsx increased by +17 lines
  • hotspot ui/src/features/agent/capabilityRegistry.ts increased by +65 lines
  • hotspot ui/src/features/agent/applicationAdapters.ts increased by +7 lines

Ratchet passed.

Comment thread ui/src/components/LoraBrowser/LoraBrowser.tsx Outdated
…g-ui-copy

# Conflicts:
#	ui/src/features/video-editor/VideoEditorPanel.tsx
#	ui/tests/i18nFoundation.test.tsx
…g-ui-copy

# Conflicts:
#	ui/src/features/series/SeriesSetupPanel.tsx
@IAnMove

IAnMove commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Autofix Details

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Language switch remounts authenticated app
    • Stabilized checkAccess with a tRef so language changes no longer recreate the callback, retrigger the effect, or remount the authenticated tree.

Create PR

Or push these changes by commenting:

@cursor push 6aa3bac930
Preview (6aa3bac930)
diff --git a/ui/src/components/LanAuthGate.tsx b/ui/src/components/LanAuthGate.tsx
--- a/ui/src/components/LanAuthGate.tsx
+++ b/ui/src/components/LanAuthGate.tsx
@@ -1,4 +1,4 @@
-import { type FormEvent, type ReactNode, useCallback, useEffect, useState } from 'react'
+import { type FormEvent, type ReactNode, useCallback, useEffect, useRef, useState } from 'react'
 import { KeyRound, LoaderCircle, ShieldCheck } from 'lucide-react'
 import { useUiTranslation } from '../i18n'
 
@@ -13,6 +13,8 @@
 export function LanAuthGate({ children }: { children: ReactNode }) {
   const { t } = useUiTranslation('shell')
   const { t: tCommon } = useUiTranslation('common')
+  const tRef = useRef(t)
+  tRef.current = t
   const [state, setState] = useState<GateState>('checking')
   const [token, setToken] = useState('')
   const [error, setError] = useState('')
@@ -26,14 +28,14 @@
         credentials: 'same-origin',
         cache: 'no-store',
       })
-      if (!response.ok) throw new Error(t('lan.statusFailed', { status: response.status }))
+      if (!response.ok) throw new Error(tRef.current('lan.statusFailed', { status: response.status }))
       const status = await response.json() as LanAuthStatus
       setState(!status.required || status.authenticated ? 'ready' : 'locked')
     } catch {
-      setError(t('lan.unreachable'))
+      setError(tRef.current('lan.unreachable'))
       setState('unreachable')
     }
-  }, [t])
+  }, [])
 
   useEffect(() => {
     void checkAccess()

You can send follow-ups to the cloud agent here.

Comment thread ui/src/components/LanAuthGate.tsx Outdated
@IAnMove

IAnMove commented Sep 3, 2026

Copy link
Copy Markdown
Owner Author

cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 1347c23. Configure here.

@IAnMove
IAnMove merged commit 9598fdd into main Sep 3, 2026
5 checks passed
@IAnMove
IAnMove deleted the i18n/catalog-remaining-ui-copy branch September 5, 2026 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant