Skip to content

fix(mobile): correct Khmer consent, sign-in, Kilo Pass, credits and notification copy - #8464

Merged
iscekic merged 1 commit into
mainfrom
drain/km-consent-and-copy-fixes
Oct 21, 2026
Merged

iscekic merged 1 commit into
mainfrom
drain/km-consent-and-copy-fixes

Conversation

@iscekic

@iscekic iscekic commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Retranslates 17 reviewed Khmer values in the mobile Khmer catalog so they match their English sources. Values only: no key is added or removed, and every interpolation is preserved.

Area Key New Khmer value
consent gatewayWhat … ព្រមទាំងសេចក្តីណែនាំ និងការថតសំឡេង…
consent installAttributionPromptMessage … យើងមិនដែលប្រើសេចក្តីណែនាំ និងការសន្ទនារបស់អ្នកទេ។
consent installAttributionTitle ការស្គាល់ប្រភពដំឡើង
consent installAttributionPromptTitle អនុញ្ញាតឱ្យស្គាល់ប្រភពដំឡើង?
credits priceUnavailable តម្លៃមិនមានទេ
credits empty កញ្ចប់ឥណទានមិនមាននៅពេលនេះទេ។
device sessions signOutThisSessionMessage {{device}} នឹងត្រូវបានចេញពីគណនី។ ឧបករណ៍នោះនៅតែអាចចូលប្រើ API បានរហូតដល់មួយម៉ោងទៀត។
Kilo Pass unavailable ផ្ទុក Kilo Pass មិនបានទេ។
Kilo Pass productsUnavailable ផលិតផល App Store មិនមានទេ
Kilo Pass productsUnavailablePlay ផលិតផល Google Play មិនមានទេ
login passkeyFailed មិនអាចចូលដោយកូនសោចូលបានទេ។ សូមចូលដោយ Apple, Google ឬអ៊ីមែលរបស់អ្នកជំនួសវិញ។
notifications channel.security ការរកឃើញសុវត្ថិភាព
notifications retryPreviews ព្យាយាមផ្ទុកសារជាមុននៃការជូនដំណឹងម្តងទៀត
notifications retrySavingPreviews ព្យាយាមរក្សាទុកសារជាមុននៃការជូនដំណឹងម្តងទៀត
organization Kilo Pass paidSeat, paidSeat_other, paidSeat_one កន្លែងសមាជិកដែលបានបង់ប្រាក់ {{displayCount}}

What each change fixes:

  • Consent. One wording for AI prompts across the consent slice (the native term four neighbouring consent keys already use), the install-attribution alert keeps the unconditional "your prompts and conversations are never used" promise with no purpose qualifier, and the attribution noun no longer reads as the app's Settings.
  • Credits. The pack-row price fallback and the empty-catalog line say the price or the packs are not available instead of saying they cannot be used. The price string is also joined into the row's accessibility label, so it read wrong to screen-reader users too.
  • Device sessions. The sign-out confirmation now credits the remaining API access to the device being revoked, not the phone in the user's hand, and drops the added "the system will let …" actor.
  • Kilo Pass. The load-failure heading carries the load sense of the source and stays distinct from the body line rendered underneath it. Both storefront labels use one parallel "products are unavailable" phrase with no download verb.
  • Login. A failed passkey ends with the same Apple / Google / email alternative the neighbouring passkey messages use, instead of telling the user to retry the passkey that just failed.
  • Notifications. The security channel uses the same "findings" term as the security category beneath it, and both preview retry labels use the preview wording of the show-full-previews label without an added settings noun.
  • Organization Kilo Pass. The active row and the overallocated warning name paid seats with one term, matching the organization-seats label.

English copy is unchanged, so no other catalog moves. paidSeat_one stays in the catalog as the brief requires; Khmer resolves the plural "other" category for every count.

Verification

Run on the work VM against this branch:

  • pnpm --filter kilo-app check:i18n → check-catalogs: 87 languages, every catalog matches en.json; oxlint 0 warnings, 0 errors.
  • node tools/i18n/check-plurals.mjs → check-plurals: every counted message and every locale declares its plural categories.
  • pnpm --filter kilo-app format:check → no files listed.
  • pnpm --filter kilo-app exec vitest run src/i18n → 17 files, 1616 tests passed (catalog parity, one-wording, plural families, label reference, unavailable-category reasons).
  • pnpm --filter kilo-app exec vitest run src/components/kilo-pass src/components/organization src/lib/kilo-pass src/components/credits src/components/device-sessions → 23 files, 216 tests passed.
  • pnpm --filter kilo-app exec vitest run src/components/notifications-screen.mounted.test.tsx → 33 tests passed with the catalog's own channel label.

A throwaway render test (deleted before the commit) switched i18n to Khmer, asserted exactUsedKey for all 17 keys, and printed what the real consumers show. Observed output:

consent.gatewayWhat: លេខសម្គាល់គណនី ទិន្នន័យមេតានៃសំណើ ការប្រើប្រាស់តូខេន ព្រមទាំងសេចក្តីណែនាំ និងការថតសំឡេងដែលកម្មវិធីផ្ញើតាមរយៈវា។
consent.installAttributionPromptMessage: Kilo ប្រើសិទ្ធិតាមដានរបស់ Apple តែដើម្បីដឹងថាអ្នកមកពីប្រភពណាប៉ុណ្ណោះ។ យើងមិនដែលប្រើសេចក្តីណែនាំ និងការសន្ទនារបស់អ្នកទេ។
consent.installAttributionTitle: ការស្គាល់ប្រភពដំឡើង
consent.installAttributionPromptTitle: អនុញ្ញាតឱ្យស្គាល់ប្រភពដំឡើង?
credits.priceUnavailable: តម្លៃមិនមានទេ
credits.empty: កញ្ចប់ឥណទានមិនមាននៅពេលនេះទេ។
deviceSessions.signOutThisSessionMessage: Chrome នឹងត្រូវបានចេញពីគណនី។ ឧបករណ៍នោះនៅតែអាចចូលប្រើ API បានរហូតដល់មួយម៉ោងទៀត។
kiloPass.unavailable: ផ្ទុក Kilo Pass មិនបានទេ។
kiloPass.productsUnavailable: ផលិតផល App Store មិនមានទេ
kiloPass.productsUnavailablePlay: ផលិតផល Google Play មិនមានទេ
login.passkeyFailed: មិនអាចចូលដោយកូនសោចូលបានទេ។ សូមចូលដោយ Apple, Google ឬអ៊ីមែលរបស់អ្នកជំនួសវិញ។
notifications.channel.security: ការរកឃើញសុវត្ថិភាព
notifications.retryPreviews: ព្យាយាមផ្ទុកសារជាមុននៃការជូនដំណឹងម្តងទៀត
notifications.retrySavingPreviews: ព្យាយាមរក្សាទុកសារជាមុននៃការជូនដំណឹងម្តងទៀត
organization.kiloPass.paidSeat_one: កន្លែងសមាជិកដែលបានបង់ប្រាក់ 8
paidSeat count=1 (organization.kiloPass.paidSeat_other): កន្លែងសមាជិកដែលបានបង់ប្រាក់ 1
paidSeat count=8 (organization.kiloPass.paidSeat_other): កន្លែងសមាជិកដែលបានបង់ប្រាក់ 8
profile card error title: ផ្ទុក Kilo Pass មិនបានទេ។
sign-out confirm: Chrome នឹងត្រូវបានចេញពីគណនី។ ឧបករណ៍នោះនៅតែអាចចូលប្រើ API បានរហូតដល់មួយម៉ោងទៀត។
passkey-failed toast: មិនអាចចូលដោយកូនសោចូលបានទេ។ សូមចូលដោយ Apple, Google ឬអ៊ីមែលរបស់អ្នកជំនួសវិញ។
org row active: 49$ · កន្លែងសមាជិកដែលបានបង់ប្រាក់ 8
org row overallocated: ចំនួន Kilo Pass ដែលបានចាត់ចែងលើសចំនួនកន្លែងសមាជិកដែលបានបង់ប្រាក់
credit row label: បន្ថែមឥណទាន 500, តម្លៃមិនមានទេ

The profile card error title, the organization row subtitle, the sign-out confirmation, the passkey toast and the credit row accessibility label above come from the real consumers, not from the raw catalog.

No screenshots: this is catalog text behind authenticated, provider-connected screens and no layout moves. The one-wording check passes, so no wording exception was needed and the exceptions file is untouched.

Proxy answers

The owner's proxy gave these answers in the owner's place.

  1. Question: Attribution term: Khmer noun for 'install attribution' in consent.installAttributionTitle and consent.installAttributionPromptTitle. All options drop the Settings noun ការកំណត់ as the brief directs; only the replacement differs.
    Answer: ការស្គាល់ប្រភពដំឡើង (recognizing the install source)
    Confidence: 0.75 · Precedent: Keep similar elements consistent across surfaces: an earlier session, "thought row match the tool call row". This option drops ការកំណត់ as the brief directs and avoids clashing with Apple's tracking wording.
  2. Question: Load-failure heading: Khmer heading for kiloPass.unavailable ('Couldn't load Kilo Pass.'), shown above kiloPass.couldNotLoad on the Kilo Pass subscription screen.
    Answer: ផ្ទុក Kilo Pass មិនបានទេ។
    Confidence: 0.70 · Precedent: Remove redundant copy: an earlier session, owner asked to remove the redundant "context" copy. The other option would show the same sentence twice on one screen.
  3. Question: Prompts term: One Khmer rendering of AI 'prompts' across consent.gatewayWhat and consent.installAttributionPromptMessage.
    Answer: Native សេចក្តីណែនាំ in both keys
    Confidence: 0.80 · Precedent: Keep similar elements consistent across surfaces: an earlier session. Four other consent keys already use សេចក្តីណែនាំ.

…otification copy

Retranslate the reviewed Khmer values that narrowed or misstated the English
source:

- consent: one wording for AI prompts across the gateway data list and the
  install-attribution alert, the alert keeps the unconditional "never used"
  promise, and "install attribution" no longer reuses the Settings noun.
- credits: the price fallback and the empty-catalog line say the price or the
  packs are not available, instead of that they cannot be used.
- device sessions: the sign-out confirmation credits the remaining API access
  to the revoked device, not the phone in the user's hand.
- Kilo Pass: the error heading says the page could not load, and the two
  storefront labels share one "products unavailable" phrase with no download
  verb.
- login: a failed passkey now points at Apple, Google or email, like its
  sibling messages.
- notifications: the security channel uses the same "findings" term as the
  security category, and both preview retry labels use the preview wording of
  the show-full-previews label.
- organization Kilo Pass: one seat term across the paid-seat row and the
  overallocated warning.
@iscekic iscekic added drain Work item from the findings drain janitor:i18n Janitor finding: mobile copy and catalog checks labels Oct 21, 2026
@kilo-code-bot

kilo-code-bot Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

Reviewed the 17 Khmer value corrections in apps/mobile/src/i18n/locales/km.json against their en.json sources and consumer call sites; every changed value matches the English meaning, preserves all interpolations, and JSON/key parity holds.

Assumptions: [INFERENCE] Read-only review: jq parsed the catalog and I inspected key/placeholder parity and consumers, but I could not execute pnpm check:i18n, check-plurals, or the vitest suites, so that verification is taken from the PR body. Khmer plural resolution (other for every count, as i18next v4 + CLDR provides) is assumed to hold at runtime; paidSeat_one is now identical to the other two variants but remains unused for km, matching the existing ja precedent.

Files Reviewed (1 file)
  • apps/mobile/src/i18n/locales/km.json - no issues

Reviewed by deepseek-flash-latest · Input: 132.7K · Output: 15K · Cached: 1.3M

Review guidance: REVIEW.md from base branch main

@iscekic iscekic added the merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. label Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

drain Work item from the findings drain janitor:i18n Janitor finding: mobile copy and catalog checks merge:bot Bot-owned review; merge when ready once readiness passes and a review approves.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants