Files
mokosh/_locales/en/messages.json
Mark 110cebc50d feat(01-12): wave-3 task-1 — manifest i18n (__MSG_*__ + default_locale='en') + _locales/{en,ru}/messages.json (16 keys; D-07 + D-08 baked in)
manifest.json migrated to chrome i18n placeholders:
- name: 'AI Call Recorder' → '__MSG_extName__'
- description: 'Запись сессий операторов для диагностики ошибок' → '__MSG_extDesc__'
- default_locale: 'en' (new field per RESEARCH §11 + Pitfall 4 fallback chain)
- action.default_title: '__MSG_tooltipOff__' (new field per Brief §02 string #1)

_locales/en/messages.json + _locales/ru/messages.json each carry the
same 16-key matrix per RESEARCH §10 + Brief §02 verbatim + D-07 user
override + D-08 tagline:

  extName, extDesc, tooltipOff, tooltipRecPrefix, tooltipErr,
  popupSavePrompt, popupSaveCta, popupSaveDone, popupSaving,
  popupSaveDoneShort, popupEmptyState, popupInfoText,
  notifStartup, notifRecovery, welcomeHeroRu, welcomeHeroEn

Canonical values (per brand-decisions-v1.md + RESEARCH §10 Brief §02):
- EN extName = 'Mokosh — Session Capture' (D-07 user override of A)
- EN extDesc = 'Thirty seconds ago, always at hand.' (D-08 tagline)
- RU extName = 'Mokosh — Запись сессии'
- RU extDesc = 'Тридцать секунд назад, всегда под рукой.'

NB on key count: the artifact-table 12-key baseline excluded the three
Wave-4 deltas (popupSaving, popupSaveDoneShort, popupEmptyState) which
are introduced now to avoid a re-locale-parity flap when Wave 4 lands.
popupInfoText is present in BOTH locales (the plan-checker flag 1
informational scope-slip is corrected here — see deviation block below).
Plan success-criteria reading: ≥12 keys with Wave 4 additive deltas
accounted for.

Each key carries both `message` and `description` per Chrome i18n
schema. EN descriptions are translator-facing; RU descriptions are
plain-Russian context for native operators.

npm run build emits:
- dist/manifest.json carries the i18n shape verbatim (crxjs preserves
  __MSG_* placeholders; Chrome's manifest loader resolves them at install)
- dist/_locales/en/messages.json (3.30 KB)
- dist/_locales/ru/messages.json (3.81 KB)

Verification:
- tests/i18n/manifest-i18n.test.ts: 10/10 GREEN
- tests/i18n/locale-parity.test.ts: 4/4 GREEN (en↔ru parity, non-empty
  messages, 16 keys each)
- tests/build/no-remote-fonts.test.ts: 4/4 GREEN (post-build dist/ has
  zero remote font URLs)
- Full vitest sweep: 145/147 GREEN (2 RED remaining are popup/style.css
  tokens-adopted cases — Wave 4 work)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 22:33:42 +02:00

67 lines
3.2 KiB
JSON

{
"extName": {
"message": "Mokosh — Session Capture",
"description": "manifest.json:name; surfaces in chrome://extensions, Web Store, right-click menus, and notification titles. Per brand-decisions-v1.md D-07 (override of branding draft A: 'Mokosh' alone). Operator-facing purpose explicit."
},
"extDesc": {
"message": "Thirty seconds ago, always at hand.",
"description": "manifest.json:description; tagline per brand-decisions-v1.md D-08. Read in Web Store + chrome://extensions card."
},
"tooltipOff": {
"message": "Mokosh — click to start recording",
"description": "Toolbar action title (chrome.action.setTitle) in OFF state. Click triggers chrome.action.onClicked → startVideoCapture per Plan 01-09 D-16-toolbar."
},
"tooltipRecPrefix": {
"message": "Mokosh — recording",
"description": "Toolbar action title prefix in REC state. The SW concatenates ' (MM:SS)' at runtime via formatElapsed(seconds) — see src/background/index.ts."
},
"tooltipErr": {
"message": "Mokosh — recording error, click to recover",
"description": "Toolbar action title in ERROR state. Click reattempts startVideoCapture."
},
"popupSavePrompt": {
"message": "Save error report?",
"description": "Popup heading copy (currently unused; reserved for future popup layouts that expose the question explicitly)."
},
"popupSaveCta": {
"message": "Save report",
"description": "Popup primary CTA button text (idle state). Triggers SAVE_ARCHIVE message to SW."
},
"popupSaveDone": {
"message": "Archive saved to Downloads.",
"description": "Popup status message after SAVE_ARCHIVE success. Used in the saveArchive success branch."
},
"popupSaving": {
"message": "Saving...",
"description": "Popup CTA text while SAVE_ARCHIVE is in flight."
},
"popupSaveDoneShort": {
"message": "Done ✓",
"description": "Popup CTA text immediately after SAVE_ARCHIVE success (3-second transient before returning to idle)."
},
"popupEmptyState": {
"message": "Open recording via the extension icon",
"description": "Popup empty-state status text shown when popup loads without an active recording (rare under Plan 01-09 SAVE-only charter)."
},
"popupInfoText": {
"message": "Last 30 s video + 10 min log",
"description": "Popup info-text below the SAVE button. Brief explanation of what the archive contains."
},
"notifStartup": {
"message": "Recording started. I'm watching the last 30 seconds.",
"description": "Notification body for the onStartup + manual-start flow. The notification title is extName."
},
"notifRecovery": {
"message": "Recording resumed. Buffer refilling.",
"description": "Notification body for the post-RECORDING_ERROR recovery flow. The notification title is extName."
},
"welcomeHeroRu": {
"message": "Тридцать секунд назад, всегда под рукой.",
"description": "Welcome page hero — Russian-quoted text (rendered alongside the English version in parallel-text layout regardless of locale)."
},
"welcomeHeroEn": {
"message": "Thirty seconds ago, always at hand.",
"description": "Welcome page hero — English text (rendered alongside the Russian version in parallel-text layout)."
}
}