Skip to content

🌍 Multi-language mode still teaches English words — build locale-aware curricula and complete i18n #21

Description

@llinsss

Problem

Selecting Spanish, French, German, or Chinese changes a handful of interface labels and the speech-synthesis locale, but the spelling curriculum remains English. The app then asks a non-English voice to pronounce English strings such as cat, dog, and yellow, while category names, age-level names, instructions, dashboard copy, and most controls remain English.

This makes the advertised “full translation + speech” behavior misleading and can actively teach incorrect pronunciation.

Evidence

  • game.js defines a single English-only curriculum object for every age and category.
  • advanced-systems.js contains UI string maps, but MultiLanguageSupport.setLanguage() only calls updateUI() and updateGameModeLabels().
  • Only a small number of elements in game.html use data-translate.
  • speakInLanguage(currentWord) applies the selected locale to the unchanged English word.
  • updateAgeDisplay() renders English curriculum/category names directly.

Proposed implementation

  1. Define a locale-aware curriculum schema with stable IDs and per-locale spelling, display text, phoneme/audio metadata, image description, and age/category placement.
  2. Move all user-visible strings out of HTML/JavaScript into complete locale catalogs, including validation, instructions, dashboard, settings, achievements, and game-mode copy.
  3. Make locale fallback explicit and visible; never silently pronounce English content with a different locale.
  4. Prefer reviewed/recorded phonics audio where browser TTS cannot reliably teach letter sounds.
  5. Persist locale per child profile rather than as one browser-global setting.
  6. Add automated catalog-completeness and curriculum-schema checks, plus native-speaker review guidance.

Acceptance criteria

  • Each advertised locale has a reviewed, age-appropriate word curriculum; unsupported locale/category combinations clearly fall back to English as a unit.
  • The selected language controls the word, answer letters, speech/audio, category and level names, instructions, feedback, settings, and dashboard.
  • No English word is sent to a non-English TTS voice unless that content is explicitly marked as English.
  • Missing and extra translation keys fail CI.
  • Locale switching cannot change the identity/history of already-recorded attempts.
  • Documentation states the actual coverage and review status of every locale.

Testing notes

  • Add unit tests for fallback resolution and locale persistence.
  • Add an end-to-end pass that completes one word in every locale and asserts text, answer, and speech locale agree.
  • Include CJK handling in letter segmentation; do not assume word.split('') is a pedagogically valid character model.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

GrantFox OSSIssue tracked in GrantFox OSSMaybe RewardedIssue may be eligible for a GrantFox rewardThird CampaignCampaign: Third Campaigndifficulty: hardSubstantial, multi-PR effort for experienced contributorsenhancementNew feature or requestfrontendBrowser UI, game client, PWA

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions