Skip to content

fix(mobile): align Khmer agent chat, session and sign-in copy - #8459

Merged
iscekic merged 3 commits into
mainfrom
drain/km-agent-copy
Oct 21, 2026
Merged

iscekic merged 3 commits into
mainfrom
drain/km-agent-copy

Conversation

@iscekic

@iscekic iscekic commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

What changes

apps/mobile/src/i18n/locales/km.json only — values, no keys, no placeholders,
no other catalog. tools/i18n/wording-exceptions.json gains open pull request
for km because that catalog now names the pull-request state apart from the
verb CTA, which other catalogs (cs, pl, be, ko, …) already do.

Classes fixed:

  1. One term per concept.
    • Profile is កម្រងព័ត៌មាន across agentChat.newSession (pickProfile,
      profileSaved, profileSelection, noProfile(s), personalProfiles,
      organizationProfiles, manageProfiles, yourProfiles,
      saveProfileDescription, advancedConfigDescription).
    • Permission is ការអនុញ្ញាត in agentChat.blockingCard and
      agentChat.permissionCard.
    • Session is វគ្គ in agentChat.autoApprove (the other agent-chat session
      labels already use it).
    • Tokens is តូខេន in agentChat.contextUsage and, because the catalog keeps
      one rendering per identical English string, in codeReviewer.reviewDetail.
    • authErrors uses one spelling of ម្តង.
  2. Punctuation of titles and labels follows English. Terminal ។ dropped from
    agentChat.session.couldNotLoad*, agentChat.preparation.earlierOutputOmitted,
    agentChat.newSession.yourProfiles and agentChat.markdownImage.httpsOnly
    (also shortened to a chip label). agents.sessionList.couldNotRefresh now
    matches its two siblings.
  3. Distinct English, distinct titles. agentChat.folderPicker.unsupportedTitle
    names the CLI limitation instead of repeating retryableTitle;
    agentChat.messageDetails.reportAiResponseFailedTerminal says the response
    cannot be reported, while the retryable key keeps the failed-attempt wording
    (the toast already carries a Retry action).
  4. Context fixes. configNeedsAttention uses ការកំណត់; manualOverrides
    drops the rejection sense; remoteHint matches the current English
    instruction; questionCard.title is kind-neutral for question and permission
    prompts; the own-answer placeholder carries the same imperative as its label;
    computeStatus.exploring no longer reuses the search wording;
    instancePicker.couldNotLoad names instances and remotes is a machine group
    header; prBadge.open is a state phrase; toolGlob/toolGrep keep their raw
    identifiers like toolBash; task progress labels say tasks; matchesBadge
    puts the count first like linesBadge; the attachment accessibility template
    separates filename and status.

Verification

  • node tools/i18n/check-catalogs.mjs → check-catalogs: 87 languages, every catalog matches en.json
  • pnpm --filter kilo-app check:i18n → oxlint 0 warnings/errors, same catalog line
  • pnpm --filter kilo-app check:plurals → every counted message and every locale declares its plural categories
  • pnpm --filter kilo-app exec vitest run src/i18n → 16 files, 1611 tests passed
  • JSON-path diff against main: 0 keys added, 0 removed, 48 values changed
  • oxfmt --check on both edited files: clean
  • Khmer runtime render of every changed key through i18n.t (including the
    matchesBadge plural family, which resolves matchesBadge_other for km,
    the attachment label, and the per-1M cost line that interpolates the tokens
    label) printed the new values.

Android emulator, local dev stack and this VM's Metro, app language ខ្មែរ,
owned fake account:

  • Sign-in code error renders លេខកូដនោះមិនត្រឹមត្រូវទេ។ សូមព្យាយាមម្តងទៀត។
    (the ម្តង spelling, authErrors.invalidCode).
  • New-session screen renders the new setup hint
    ដើម្បីដំណើរការនៅលើកុំព្យូទ័ររបស់អ្នក សូមចាប់ផ្តើម Kilo នៅទីនោះ ហើយទុកវាដំណើរការ។
    with no command steps, and the run-on row reads ដំណើរការលើ: Cloud Agent.

Copied from the emulator UI hierarchy, not guessed. Copy-only change; screenshots
are on the pull request comment.

Proxy answers

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

  1. Question: Scope: The brief names the agentChat.newSession and blockingCard keys, but two sibling strings render the same concepts in the same surfaces: agentChat.newSession.advancedConfigDescription („Select a profile…“ still says ទម្រង់) and agentChat.permissionCard.denyPermission („Deny permission“ says សិទ្ធិ). Include them?
    Answer: Include both
    Confidence: 0.85 · Precedent: Fix the root cause and the class of the issue on every affected surface: session 00eb2a1d3e4b, "if anything repeats the same mistake over and over again, fix the class"
  2. Question: Tool labels: agentChat.toolCard.* in km: bash is raw „bash“, glob/grep are Khmer phrases, and read/edit/write/list/patch/task are Khmer words. The brief says glob and grep „stay raw identifiers like toolBash“. Apply that?
    Answer: Raw glob/grep
    Confidence: 0.85 · Precedent: Keep similar elements consistent across surfaces: session a247f3c19b1e, owner asked that the thought row match the tool call row
  3. Question: Needs-input title: agentChat.questionCard.title (English „Agent needs input“) is also the body of permission notifications. Which neutral Khmer title?
    Answer: ភ្នាក់ងារត្រូវការការបញ្ចូលពីអ្នក
    Confidence: 0.70 · Precedent: Keep similar elements consistent across surfaces: session a247f3c19b1e, owner asked that the thought row match the tool call row
  4. Question: Instances: agentChat.instancePicker.couldNotLoad (English „Couldn't load instances“). The chat instance pickers of the excluded features translate instance as អ៊ីនស្តង់ („មិនអាចផ្ទុកអ៊ីនស្តង់បានទេ។“); the agent picker currently says បញ្ជីដំណើរការ (list of processes). Which term?
    Answer: អ៊ីនស្តង់
    Confidence: 0.80 · Precedent: Fix the class of the issue on every affected surface: session 75f8833fe8c1, "fix this for all shared services model pickers on all surfaces"

- One Khmer term per concept in the agent permission and profile copy:
  profile កម្រងព័ត៌មាន, permission ការអនុញ្ញាត, session វគ្គ, tokens តូខេន,
  and ម្តង throughout authErrors.
- Title and label strings follow the English punctuation; the session list
  errors share one punctuation style.
- Retryable and terminal failures keep distinct titles in the folder picker
  and the report-response toast.
- Context fixes: config label, manual overrides, remote hint, needs-input
  title, own-answer placeholder, exploring status, instance load error,
  remote group header, PR badge state, tool identifiers, task progress label,
  count badge order, attachment accessibility separator.
- Note the open pull request state label beside the verb CTA in the Khmer
  wording exceptions, as other catalogs already do.

Verified with check:i18n, check:plurals, the i18n vitest suites, and the
Android app in Khmer.
@iscekic iscekic added drain Work item from the findings drain janitor:i18n Janitor finding: mobile copy and catalog checks labels Oct 21, 2026
@iscekic

iscekic commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

bot: Khmer copy exercised on the Android emulator against the local dev stack on this VM: app language ខ្មែរ, owned fake account, backend and Metro on the VM.

What I observed:

  • Sign-in code screen: a wrong code renders the new authErrors.invalidCode line, whose "again" now uses the same spelling as the rest of the family.
  • New-session screen: the setup hint under the run-on row renders the new agentChat.newSession.remoteHint text, which no longer asks for kilo remote or /remote, and the run-on row reads ដំណើរការលើ: Cloud Agent.

Both strings were copied from the emulator UI hierarchy on the same screens, not guessed. The remaining changed strings are agent surfaces behind a connected provider or a live permission prompt; those are covered by the Khmer runtime render of every changed key in the PR body, plus check:i18n, check:plurals and the i18n vitest suites.

No production data, credentials, or account details are visible; the address in the first capture is an owned fake test account.

Sign-in code error in Khmer on the Android emulator

New-session setup hint in Khmer on the Android emulator

Comment thread apps/mobile/src/i18n/locales/km.json Resolved
@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

The incremental commit replaces the Arabic comma in the Khmer attachment accessibility label with the ASCII , used by en.json, resolving the previous finding; no new issues in the changed line.

Assumptions: [INFERENCE] Khmer wording quality was assessed against en.json values and key usage sites, not by a native Khmer speaker.

Files Reviewed (2 files)
  • apps/mobile/src/i18n/locales/km.json
  • tools/i18n/wording-exceptions.json
Previous Review Summary (commit e832e1e)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit e832e1e)

Status: 1 Issue Found | Recommendation: Address before merge

Executive Summary

One copy defect: the new Khmer attachment accessibility label uses an Arabic comma (U+060C) instead of the comma in the English source; the rest of the Khmer catalog and wording-exception changes check out.

Assumptions: [INFERENCE] Khmer wording quality was assessed against en.json values, key usage sites, and the catalog-check tooling, not by a native Khmer speaker; the PR's emulator evidence covers only the sign-in and new-session strings.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
apps/mobile/src/i18n/locales/km.json 951 chat.attachmentPreview.accessibility separates filename and status with U+060C (،) instead of the ASCII comma used in en.json.
Files Reviewed (2 files)
  • apps/mobile/src/i18n/locales/km.json - 1 issue
  • tools/i18n/wording-exceptions.json - 0 issues

Fix these issues in Kilo Cloud


Reviewed by deepseek-flash-latest · Input: 43.8K · Output: 2.6K · Cached: 269.3K

Review guidance: REVIEW.md from base branch main

The attachment accessibility label now joins the filename and the status with
the same comma the English template uses, so a screen reader announces the two
parts with the catalog's own punctuation.
@iscekic iscekic added the merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. label Oct 21, 2026
@iscekic iscekic added merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. and removed merge:bot Bot-owned review; merge when ready once readiness passes and a review approves. labels 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