Skip to content

Show StepForge in French, Spanish, Russian, Simplified Chinese or Japanese, chosen in Settings → General - #186

Merged
Twest2 merged 8 commits into
mainfrom
feat/178-translations
Oct 29, 2026
Merged

Twest2 merged 8 commits into
mainfrom
feat/178-translations

Conversation

@Twest2

@Twest2 Twest2 commented Oct 29, 2026

Copy link
Copy Markdown
Owner

Issue

Relates to #178 (point 2, translations). Stacked on #179: the base is feat/178-microsoft-store, so the Store package can declare the new languages. Merge #179 first and GitHub retargets this PR to main.

Summary

StepForge's interface now comes in English, French, Spanish, Russian, Simplified Chinese and Japanese. It follows the system language by default. Settings → General → Language (the last card on the page) picks a different one, and StepForge reloads its window in that language after saving the open guide. Every language except English is marked Beta in the picker. Exported guides stay in English.

The Microsoft Store package now lists all six languages, so the Store shows StepForge as available in them and Partner Center offers a listing for each one.

Changes

  • Translation layer: core/i18n.js is shared by the main process and the sandboxed renderer, which loads it with a script tag.
    • The English text is the key: t('Settings'), t('Move to {folder}', { folder }), and tn(count, '{count} step', '{count} steps') for plurals, using Intl.PluralRules. Russian has one, few and many forms.
    • Text a catalog doesn't have shows in English.
    • Catalogs live in core/locales/<code>.js.
  • Language setting: settings.language defaults to 'system'; it was an unused 'en' before.
    • The main process works out the language from the setting and app.getPreferredSystemLanguages(), then loads index.html?lang=<code>.
    • A system locale like fr-CA maps to French. Traditional Chinese locales fall back to English.
    • New IPC app:setLanguage validates the choice, saves it and reloads the window when the shown language changes. settings:set now refuses the language key.
  • Beta marking: each non-English option reads, for example, "Français (Beta)". The usual Beta chip also shows beside the picker whenever the chosen or system language isn't English.
  • What's translated (732 messages per language):
    • The library, top bar, welcome screen and capture bar.
    • All of Settings except the Accounts and Branding panels.
    • The editor's step list, toolbar, AI menu, annotations, blocks and toasts.
    • Export, guide information, backups, find and replace, quick actions, keyboard shortcuts and shared dialogs.
    • File dialog titles from the main process.
    • Dates in the library follow the interface language; English keeps the system's date format.
  • Store: scripts/package-windows-store.js takes appx.languages from LANGUAGES (en-US first, as the default).
  • Tooling: npm run translations (scripts/check-translations.js) lists text each catalog is missing and placeholder mismatches.
  • Tests: new tests/unit/i18n.test.js covers locale matching, fallback, plurals, catalog completeness and placeholders, and the renderer bootstrap. Renderer UI tests get the translator through a rendererI18n() helper. Two source-matching tests were updated for the wrapped labels.
  • Docs: README, Getting Started (Language setting), Contributing (how to write translatable text, add a language), Architecture, and the Store release guide (listing languages).

Area

  • Guide editor
  • Library
  • Settings
  • Packaging / install
  • Documentation
  • Tests

Testing

  • npm test: 1050 passed, 0 failed, 20 skipped.
  • npm run translations: 732 of 732 in every language.
  • tests/checks/test_repo_structure.sh passes.
  • bash tests/run_test.sh not run (it launches the app).
  • Not yet checked in the running app. Still to look at:
    • Switching languages in Settings.
    • Long French and Russian labels in the toolbar and Settings.
    • CJK text on Windows and on Linux without Noto CJK fonts installed.
  • The translations are mine and not reviewed by native speakers. That is why they ship as Beta.

Screenshots or recordings

N/A

Rollout notes

  • An existing settings file keeps its saved language: 'en', so current installs stay in English. New installs follow the system language.
  • Not translated yet, so shown in English:
    • The Accounts panels (Drive, OneDrive, Dropbox, WebDAV, GitHub, Confluence, Wiki.js).
    • Branding settings, the publish dialogs, compare view and the region picker.
    • Error messages that come from the main process.
  • For the Store: submitting with only the English listing is fine. The other languages can get translated listings later.

Checklist

  • Linked to an issue above
  • Scope is limited to that issue
  • Docs updated for user-visible changes
  • No new network calls, runtime dependencies, or third-party branding
  • Follow-up work is tracked in an issue (translating the remaining panels)

@Twest2
Twest2 changed the base branch from feat/178-microsoft-store to main October 29, 2026 18:22
@Twest2
Twest2 merged commit d10d5ed into main Oct 29, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant