Skip to content

fix(mobile): align Khmer model, endpoint and catalog terms - #8471

Merged
iscekic merged 2 commits into
mainfrom
drain/khmer-model-terms
Oct 21, 2026
Merged

iscekic merged 2 commits into
mainfrom
drain/khmer-model-terms

Conversation

@iscekic

@iscekic iscekic commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

What changes

One file: apps/mobile/src/i18n/locales/km.json. Nine user-facing strings, keys and {{placeholders}} unchanged.

Key Before After
modelChat.backends.cloudModel ម៉ូដែល៖ {{model}} គំរូ៖ {{model}}
modelChat.backends.cloudUnavailable ម៉ូដែល Kilo … គំរូ Kilo …
modelChat.backends.completionTokenFieldHelp … ចំណុចបញ្ចប់ … … ចំណុចភ្ជាប់ …
modelChat.catalog.recommendationsHelp … មួយម៉ូដែល … … មួយគំរូ …
modelChat.catalog.compatibilityHelp ឯកសារម៉ូដែល ឯកសារគំរូ
modelChat.catalog.fit.unknown ភាពសមមិនដឹង មិនដឹងថាសម
modelChat.catalog.downloads ការទាញយក៖ {{value}} ចំនួនទាញយក៖ {{value}}
modelChat.mcp.settingsToolsSubtitle … ម៉ូដែល និង … … គំរូ និង …
modelChat.mcp.settingsToolsOn / Off … ទៅម៉ូដែល … ទៅគំរូ
models.auto.efficient ស្វ័យប្រវត្តិ ប្រសិទ្ធភាព ស្វ័យប្រវត្តិ មានប្រសិទ្ធភាព

"Model" now uses the native term the feature already uses 78 times against 7 loanword uses, and which is also the majority term in the catalog (84 against 61). "Endpoint" uses the term the backend help already uses five times; only the completion-token help differed.

Not changed: modelChat.backends.messages

That key is the Anthropic protocol option, rendered by API_KINDS in apps/mobile/src/components/chat/backend-form-state.ts next to chatCompletions and responses under backends.protocol. tools/i18n/check-catalogs.mjs allowlists exactly those three keys as "the inference protocols keep their published API names across locales", and de, fr, es and ja also keep Messages in English. Translating it would leave the radio group mixed and contradict the documented intent, so the finding is rejected with that evidence.

Verification

  • pnpm --filter kilo-app check:i18n (the package is kilo-app; @kilocode/mobile matches no project): oxlint i18n rules 0 errors, then check-catalogs: 87 languages, every catalog matches en.json.
  • pnpm --filter kilo-app exec vitest run src/i18n: 16 files, 1611 tests pass.
  • pnpm -w exec oxfmt --list-different apps/mobile/src/i18n/locales/km.json: no diff.
  • Android emulator (omp36, Android 16) with the dev client against the local stack, app language set to Khmer. Observed on device:
    • chat backends sheet: គំរូ៖ Aion 3.5
    • add-backend form: completion-token help ends "… ប្រសិនបើចំណុចភ្ជាប់របស់អ្នកតម្រូវឱ្យប្រើវាលចាស់។", and the protocol options still read Chat Completions / Responses / Messages
    • local model catalog: recommendations help "… ឯកសារមួយក្នុងមួយគំរូ …", compatibility help "… ឯកសារគំរូ …", unknown-fit badge "មិនដឹងថាសម", detail stats "ចំនួនទាញយក៖ 307 ពាន់" beside "ចំនួនចូលចិត្ត៖ 152"
    • MCP tools sheet: subtitle "… ការជូនដំណឹង គំរូ និងចំណង់ចំណូលចិត្តផ្សេងទៀត។", status "បើក — ឧបករណ៍កំណត់ត្រូវបានផ្ញើទៅគំរូ"
    • new coding task model chip and picker: "ស្វ័យប្រវត្តិ មានប្រសិទ្ធភាព" beside "ស្វ័យប្រវត្តិ មានតុល្យភាព"

Screenshots of those screens follow in a comment on this pull request.

cloudUnavailable and the settings-tools "off" status were only exercised indirectly: the local stack always had an available cloud model and the group switch was left on, so those two exact values were checked by the catalog parity check rather than read on screen.

CI note

The first run's mobile shard 5 failed on todo-list-model-picker.mounted.test.tsx ("No BackHandler export is defined on the react-native mock"). The same shard fails identically on main at the same commit range, the file passes locally on this branch, and #8475 (merged) adds the missing stub. The branch carries one merge of main so the pull-request merge commit picks that fix up; the rerun is green.

Proxy answers

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

  1. Question: Model term: Khmer term for "model" the change standardizes on?
    Answer: គំរូ everywhere (Recommended)
    Confidence: 0.90 · Precedent: Do the least work possible with no drop in quality ("do the least amount of work possible, with no drop in quality"); the brief also prefers គំរូ
  2. Question: Fit badge: Khmer wording for the "Fit unknown" catalog badge (current ភាពសមមិនដឹង)?
    Answer: មិនដឹងថាសម (Recommended)
    Confidence: 0.70 · Precedent: Keep similar elements consistent across surfaces (owner asked that the thought row match the tool call row)
  3. Question: Protocol label: The finding asks to translate modelChat.backends.messages, but it is the Anthropic-protocol option name. Translate or keep?
    Answer: Keep "Messages" English (Recommended)
    Confidence: 0.60 · Precedent: Trust the code over documents ("only trust code"); the checker allowlist and the sibling protocol names stay English, so the radio group stays consistent
  4. Question: Downloads stat: Khmer wording for the catalog "Downloads: {{value}}" stat (current ការទាញយក៖ {{value}})?
    Answer: ចំនួនទាញយក៖ {{value}} (Recommended)
    Confidence: 0.80 · Precedent: Keep similar elements consistent across surfaces (thought row to match tool call row); the brief asks for a count noun parallel to Likes
  5. Question: CI unblock: CI's mobile shard 5 fails on a pre-existing main defect (a to-do list test that mocks react-native without BackHandler); test(mobile): stub BackHandler for the to-do list settings sheet #8475 fixed it and merged, but this PR's test merge ref is stale, so the rerun still checks the old base. The branch has no conflict. How should I unblock it?
    Answer: Merge origin/main into the branch (Recommended)
    Confidence: 0.90 · Precedent: Git and pull requests: "never rebase, always merge"; merge main only when a conflict or a fix on main needs it ("try merging main in, that may fix the issue")

The Khmer catalog named the same concepts two ways on the chat and model
screens. Use the native term for an AI model everywhere the local model
chat surface and the MCP settings-tools strings refer to it, name an
endpoint with the term the backend help already uses, make the unknown-fit
badge and the downloads stat read unambiguously, and give Auto Efficient
the adjectival form its Auto siblings use.

The inference protocol names stay in English, as every other locale keeps
them.
@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 rendering on the Android dev client against the local development stack, with the app language set to Khmer. Each capture was taken on the screen named in its alt text.

  • Chat backends sheet: the cloud row names the model with the native term instead of the loanword.
  • Add-backend form: the completion-token help names an endpoint with the same term as the rest of the backend help, while the protocol options keep their published API names.
  • Local model catalog: the compatibility help uses the same model term as the catalog title, and the row whose size the device cannot judge shows the reworded unknown-fit badge.
  • Catalog detail: the downloads stat reads as a count, in the same form as the likes stat.
  • Tools sheet: the settings-tools subtitle and status line use the native model term.
  • New task model picker: Auto Efficient now reads as an adjective, parallel to Auto Balanced.

Khmer chat backends screen

Khmer backend form screen

Khmer model catalog screen

Khmer catalog detail screen

Khmer tools sheet screen

Khmer model picker screen

@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 Khmer catalog edit is a strings-only change: all nine keys, key paths and {{placeholders}} ({{model}}, {{value}}) are preserved, the JSON structure stays valid (no trailing/missing commas, completionTokenFieldHelp remains the last member of modelChat.backends), and no new value collides with another key in the catalog.

Assumptions: [INFERENCE] In read-only mode I could not execute pnpm check:i18n or the vitest suite, so catalog parity and test results are taken from the PR description rather than reproduced; I verified key set and placeholder parity, JSON structure, and duplicate-value risk by reading km.json and comparing against en.json. Terminology consistency with the wider app is only partial by design — other surfaces (e.g. common.model at line 31, codeReviewAgent.title at 1810) still use the loanword ម៉ូដែល, but those are unchanged lines outside this PR's scope.

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

Reviewed by deepseek-flash-latest · Input: 57.7K · Output: 6K · Cached: 556.9K

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