Skip to content

feat(android): localize core gateway surfaces#97111

Merged
vincentkoc merged 6 commits into
mainfrom
codex/i18n-android
Jul 1, 2026
Merged

feat(android): localize core gateway surfaces#97111
vincentkoc merged 6 commits into
mainfrom
codex/i18n-android

Conversation

@vincentkoc

@vincentkoc vincentkoc commented Jun 26, 2026

Copy link
Copy Markdown
Member

What Problem This Solves

The Android app had incomplete locale coverage and several gateway, onboarding, trust, shell, and recovery surfaces still used inline English.

Why This Change Was Made

Move those user-visible strings into Android resources and enforce complete key parity for the shared 21-locale native matrix. Regional qualifiers are mapped to Android resource directories, positional placeholders are validated, and every referenced resource key must exist in English.

User Impact

Thirty-five core Android strings now render in Simplified Chinese, Traditional Chinese, Brazilian Portuguese, German, Spanish, Japanese, Korean, French, Hindi, Arabic, Italian, Turkish, Ukrainian, Indonesian, Polish, Thai, Vietnamese, Dutch, Persian, Russian, and Swedish. Existing Swedish product naming remains OpenClaw-nod.

Evidence

  • node scripts/run-vitest.mjs test/scripts/android-app-i18n.test.ts test/scripts/native-app-i18n.test.ts (3 tests)
  • node --import tsx scripts/android-app-i18n.ts check (35 keys, 21 locales)
  • node --import tsx scripts/native-app-i18n.ts check (2,316 entries)
  • xmllint --noout across every localized strings.xml
  • git diff --check
  • Fresh autoreview: no accepted/actionable findings

This PR is stacked on #97110.

@openclaw-barnacle openclaw-barnacle Bot added app: android App: android scripts Repository scripts size: M maintainer Maintainer-authored PR labels Jun 26, 2026
@clawsweeper

clawsweeper Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 1, 2026, 5:57 AM ET / 09:57 UTC.

Summary
The branch moves selected Android gateway, onboarding, trust, shell, and recovery copy into Android resources for a 21-locale matrix and adds a checker, test, package script, and native-i18n CI step.

PR surface: Tests +14, Config +4, Other +951. Total +969 across 31 files.

Reproducibility: not applicable. for a feature PR. Source inspection confirms current main lacks the Android resource matrix and the branch adds it on the stacked head.

Review metrics: 2 noteworthy metrics.

  • Android i18n automation gate: 1 package script added, 1 CI step added. This changes the native-i18n validation path maintainers rely on before and after merging the locale matrix.
  • Localized Android resource scope: 35 keys across 21 locales. The user-visible surface is broad enough that key parity, placeholder parity, and packaging proof matter before landing.

Stored data model
Persistent data-model change detected: serialized state: scripts/android-app-i18n.ts, serialized state: test/scripts/android-app-i18n.test.ts. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Keep final landing tied to the foundation PR and the latest green native-i18n/Android checks.

Mantis proof suggestion
A short Android emulator or device capture in a non-English locale would materially improve review confidence for the visible localization change. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify the Android gateway setup, Connect tab, trust prompt, and recovery title render localized text in a non-English locale.

Risk before merge

  • [P1] This PR is stacked on feat(i18n): add native app locale inventory #97110, so merge order and exact-head validation need to stay aligned with that still-open foundation branch.
  • [P1] The diff adds a new Android i18n CI gate; maintainers should intentionally accept that future Android resource drift can become CI-blocking automation behavior.

Maintainer options:

  1. Land With The Foundation Stack (recommended)
    Merge only after feat(i18n): add native app locale inventory #97110 is accepted or otherwise present in the base and the latest head keeps the native-i18n and Android checks green.
  2. Accept The New CI Gate
    Maintainers can intentionally accept that Android string-resource drift becomes a CI-blocking condition for future native app changes.

Next step before merge

  • No narrow repair finding remains; because this is a maintainer/protected stacked PR, the next action is normal maintainer review of stack order, checks, and landing readiness.

Security
Cleared: Cleared: the diff adds Android resources, Kotlin stringResource calls, local checker/test code, a package script, and an existing pinned CI workflow path without new dependencies, secrets, permissions, action refs, or downloaded code.

Review details

Best possible solution:

Land this after the native i18n foundation is accepted or included in the base, with the latest Android/native i18n checks green and the new checker kept as the canonical resource-drift gate.

Do we have a high-confidence way to reproduce the issue?

Not applicable for a feature PR. Source inspection confirms current main lacks the Android resource matrix and the branch adds it on the stacked head.

Is this the best way to solve the issue?

Yes, this is the right maintainable direction: Android string resources plus a shared locale/checker path avoid a separate manual localization workflow. I did not find a remaining line-level correctness defect after the latest restack.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against fcb135dfc13e.

Label changes

Label changes:

  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: Not applicable: this is a maintainer/member PR, so the external-contributor real behavior proof gate does not apply; command and CI proof are still present in the discussion.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: ⏳ waiting on author: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a bounded Android localization/tooling feature with visible user impact but no outage, data loss, or security emergency.
  • merge-risk: 🚨 automation: The diff adds an Android i18n package script and native-i18n CI step, so landing changes future validation and automation behavior.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: Not applicable: this is a maintainer/member PR, so the external-contributor real behavior proof gate does not apply; command and CI proof are still present in the discussion.
Evidence reviewed

PR surface:

Tests +14, Config +4, Other +951. Total +969 across 31 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 1 14 0 +14
Docs 0 0 0 0
Config 2 4 0 +4
Generated 0 0 0 0
Other 28 1376 425 +951
Total 31 1394 425 +969

What I checked:

Likely related people:

  • Paul Frederiksen: Current-main blame for the affected Android trust-dialog literals points to this commit across the touched Onboarding and Connect tab files. (role: current-main provenance contributor; confidence: medium; commits: d68ba5edc598; files: apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt, apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt)
  • Josh Avant: Recent current-main history on OnboardingFlow includes adjacent Android QR pairing and mobile recovery fixes in the same app surface. (role: recent Android gateway/onboarding contributor; confidence: medium; commits: f55abc0606f0, ad59492d3ca9; files: apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt)
  • vincentkoc: The live PR is assigned to vincentkoc, and the latest comments and commits show vincentkoc carrying the Android localization stack and proof refresh. (role: current i18n stack owner; confidence: medium; commits: 4bef18776c9c, 2990e39a87ca, fde4d261d9cf; files: apps/android/app/src/main/java/ai/openclaw/app/ui/ConnectTabScreen.kt, apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt, scripts/android-app-i18n.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. labels Jun 26, 2026
@vincentkoc
vincentkoc force-pushed the codex/i18n-native-pipeline branch 2 times, most recently from ab24f11 to 1545198 Compare June 26, 2026 23:55
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from b06e020 to d1c8d9f Compare June 26, 2026 23:56
@vincentkoc vincentkoc changed the title feat(android): localize gateway onboarding feat(android): localize native app locale matrix Jun 26, 2026
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from d1c8d9f to 24347d8 Compare June 27, 2026 00:03
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from 24347d8 to e36927b Compare June 27, 2026 00:08
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch 2 times, most recently from e660a39 to 5a5ddbf Compare June 27, 2026 00:17
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch 5 times, most recently from 47f2a23 to 8b7cf4f Compare June 27, 2026 00:44
@clawsweeper clawsweeper Bot removed the status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. label Jun 27, 2026
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from 26683a3 to b7c0b82 Compare June 27, 2026 01:04
@vincentkoc vincentkoc self-assigned this Jul 1, 2026
@vincentkoc
vincentkoc force-pushed the codex/i18n-native-pipeline branch from afbbd2a to 1fd5a56 Compare July 1, 2026 08:56
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from b7c0b82 to 8016c3b Compare July 1, 2026 08:56
@vincentkoc vincentkoc changed the title feat(android): localize native app locale matrix feat(android): localize core gateway surfaces Jul 1, 2026
@vincentkoc
vincentkoc requested a review from obviyus July 1, 2026 08:57
@vincentkoc
vincentkoc marked this pull request as ready for review July 1, 2026 08:57
@vincentkoc

Copy link
Copy Markdown
Member Author

Rebased onto the corrected native i18n foundation and refreshed Android proof.

Validation:

  • node scripts/run-vitest.mjs test/scripts/android-app-i18n.test.ts test/scripts/native-app-i18n.test.ts — 3 tests passed
  • node --import tsx scripts/android-app-i18n.ts check — 35 keys across 21 locales
  • node --import tsx scripts/native-app-i18n.ts check — 2,316 entries, no drift
  • xmllint --noout across every localized strings.xml
  • git diff --check
  • fresh autoreview — no accepted/actionable findings

The stack-wide changed gate is blocked only by the same four test type errors reproduced on clean current main; the Android i18n checks are green.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from 8016c3b to b13f0d0 Compare July 1, 2026 09:04
@vincentkoc
vincentkoc force-pushed the codex/i18n-native-pipeline branch from e1c8f00 to 0a1b553 Compare July 1, 2026 09:13
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from b13f0d0 to fde4d26 Compare July 1, 2026 09:13
@vincentkoc

Copy link
Copy Markdown
Member Author

Final restack head: fde4d261d9cfd3ca413fb49823b01df98839f7e0, based on the current foundation head.

Exact-head proof:

  • Android checker: 35 keys across 21 locales
  • 3 focused tests passed; every strings.xml passed xmllint
  • Play and third-party AAPT resource merges passed
  • Italian/Turkish apostrophe packaging defect fixed; checker now rejects invalid Android apostrophe syntax
  • native inventory: 2,316 entries, no drift; autoreview clean

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jul 1, 2026
@vincentkoc
vincentkoc changed the base branch from codex/i18n-native-pipeline to main July 1, 2026 10:07
@vincentkoc
vincentkoc force-pushed the codex/i18n-android branch from fde4d26 to 640569b Compare July 1, 2026 10:34
@vincentkoc
vincentkoc merged commit 9c13038 into main Jul 1, 2026
85 checks passed
@vincentkoc
vincentkoc deleted the codex/i18n-android branch July 1, 2026 10:43
@vincentkoc

Copy link
Copy Markdown
Member Author

Merged via rebase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: android App: android maintainer Maintainer-authored PR merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. scripts Repository scripts size: XL status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant