Original Request
add i18n for top 10 Wikipedia language for our UI
Agent's Two Cents (could be wrong)
Everything below is the AI agent's best guess based on the current codebase.
Take with a grain of salt — the original request above is the only thing that came from a human.
Problem / Motivation
WikiLoop DoubleCheck currently only supports English, despite reviewing edits across all Wikipedia language editions. The top 10 Wikipedia languages by active editors — English (en), German (de), French (fr), Spanish (es), Japanese (ja), Russian (ru), Chinese (zh), Portuguese (pt), Italian (it), and Polish (pl) — represent the majority of potential reviewers. Adding translations for these languages would dramatically expand the user base and align the tool with its multilingual mission.
Proposed Solution
Create locale JSON files for each of the top 10 Wikipedia languages, leveraging the existing vue-i18n infrastructure already in place. Add a language selector to the web UI and extension popup. The userscript can piggyback on MediaWiki's native i18n system for most strings.
Top 10 Wikipedia languages (by active editors):
- English (en) — already done ✅
- German (de)
- French (fr)
- Spanish (es)
- Japanese (ja)
- Russian (ru)
- Chinese (zh)
- Portuguese (pt)
- Italian (it)
- Polish (pl)
Architecture Diagram
┌─────────────────────────────────────────────────────┐
│ @doublecheck/core │
│ i18n/ │
│ ├── en.json (88 keys, exists) │
│ ├── de.json ← NEW │
│ ├── fr.json ← NEW │
│ ├── es.json ← NEW │
│ ├── ja.json ← NEW │
│ ├── ru.json ← NEW │
│ ├── zh.json ← NEW │
│ ├── pt.json ← NEW │
│ ├── it.json ← NEW │
│ └── pl.json ← NEW │
│ │
│ src/i18n/setup.ts │
│ └── createDoubleCheckI18n() │
│ └── loadLocale(i18n, locale, messages) ← EXISTING │
└────────────────────┬────────────────────────────────┘
│ imports locale JSON
┌────────────┼────────────┬──────────────┐
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌──────────┐ ┌────────────┐
│ web │ │extension│ │userscript│ │ server │
│ │ │ │ │ │ │ (no i18n) │
│ i18n/ │ │ popup/ │ │ i18n.ts │ └────────────┘
│ index.ts│ │ main.ts │ │ (mw.msg │
│ │ │ (chrome │ │ + fall- │
│ + lang │ │ .i18n) │ │ back) │
│ selector│ │ │ │ │
│ ← NEW │ │ │ │ │
└─────────┘ └─────────┘ └──────────┘
Dependencies & Potential Blockers
No major blockers identified. vue-i18n v9/v10 is already installed across core, web, and extension packages. The lazy-loading infrastructure (loadLocale()) already exists in packages/core/src/i18n/setup.ts. The main effort is translation of ~146 UI strings × 9 new languages.
How to Validate
Scope Estimate
medium
Key Files/Modules Likely Involved
packages/core/i18n/en.json — source strings to translate (88 keys)
packages/core/src/i18n/setup.ts — lazy-loading setup, may need locale registry
packages/web/src/i18n/en.json — web-specific strings (146 keys, superset of core)
packages/web/src/i18n/index.ts — locale initialization, add language selector logic
packages/extension/src/popup/main.ts — Chrome UI language detection
packages/userscript/src/i18n.ts — bundled fallback messages
Rough Implementation Sketch
- Create 9 new JSON locale files in
packages/core/i18n/ following the existing key format (Button-, Label-, Message-, etc.)
- Consolidate web locale with core (resolve the existing TODO in
web/src/i18n/index.ts)
- Add a language selector component (dropdown or icon) to the web app header/settings
- Wire
loadLocale() to dynamically import the selected language's JSON
- Store language preference in localStorage, default to browser's
navigator.language
- Extension already detects browser language — just needs the locale files available
- For userscript: register translated messages via
mw.messages.set() per locale
- Also i18n-ify hardcoded English strings in extension popup (
App.vue lines 177-234) and web landing page (LandingPage.vue)
Open Questions
- Translation source: Use AI-generated translations as a starting point, then invite community review? Or wait for human translators? The README lists historical translation volunteers for ZH, UK, IT, ES, PT, JA, RU from v4.
- Consolidate web/core locales first? The web package duplicates core strings due to a bundler resolution issue (TODO in
web/src/i18n/index.ts). Should this be fixed as a prerequisite?
- Partial translations: If a language is only 80% translated, show English fallback for missing keys (vue-i18n supports this natively via
fallbackLocale)?
- Hardcoded strings: Should the ~15 hardcoded English strings in extension popup and landing page be i18n-ified as part of this issue or tracked separately?
Potential Risks or Gotchas
- German and Russian strings are often 30-50% longer than English — may break tight UI layouts (buttons, mobile views)
- Japanese and Chinese need proper font loading considerations
- The extension's
_locales/ Chrome i18n system is separate from vue-i18n — may need both for full coverage
- AI-generated translations may have quality issues for technical Wikipedia terminology
Original Request
Agent's Two Cents (could be wrong)
Problem / Motivation
WikiLoop DoubleCheck currently only supports English, despite reviewing edits across all Wikipedia language editions. The top 10 Wikipedia languages by active editors — English (en), German (de), French (fr), Spanish (es), Japanese (ja), Russian (ru), Chinese (zh), Portuguese (pt), Italian (it), and Polish (pl) — represent the majority of potential reviewers. Adding translations for these languages would dramatically expand the user base and align the tool with its multilingual mission.
Proposed Solution
Create locale JSON files for each of the top 10 Wikipedia languages, leveraging the existing
vue-i18ninfrastructure already in place. Add a language selector to the web UI and extension popup. The userscript can piggyback on MediaWiki's native i18n system for most strings.Top 10 Wikipedia languages (by active editors):
Architecture Diagram
Dependencies & Potential Blockers
No major blockers identified. vue-i18n v9/v10 is already installed across core, web, and extension packages. The lazy-loading infrastructure (
loadLocale()) already exists inpackages/core/src/i18n/setup.ts. The main effort is translation of ~146 UI strings × 9 new languages.How to Validate
chrome.i18n.getUILanguage()and loads matching locale{count},{feed}) in all languagesScope Estimate
medium
Key Files/Modules Likely Involved
packages/core/i18n/en.json— source strings to translate (88 keys)packages/core/src/i18n/setup.ts— lazy-loading setup, may need locale registrypackages/web/src/i18n/en.json— web-specific strings (146 keys, superset of core)packages/web/src/i18n/index.ts— locale initialization, add language selector logicpackages/extension/src/popup/main.ts— Chrome UI language detectionpackages/userscript/src/i18n.ts— bundled fallback messagesRough Implementation Sketch
packages/core/i18n/following the existing key format (Button-,Label-,Message-, etc.)web/src/i18n/index.ts)loadLocale()to dynamically import the selected language's JSONnavigator.languagemw.messages.set()per localeApp.vuelines 177-234) and web landing page (LandingPage.vue)Open Questions
web/src/i18n/index.ts). Should this be fixed as a prerequisite?fallbackLocale)?Potential Risks or Gotchas
_locales/Chrome i18n system is separate from vue-i18n — may need both for full coverage