fix(i18n): preserve native placeholders and whitespace

This commit is contained in:
Vincent Koc
2026-06-26 17:16:33 -07:00
committed by Vincent Koc
parent a519a07d36
commit 3d96a0039f
4 changed files with 627 additions and 16 deletions

View File

@@ -1173,9 +1173,9 @@
"kind": "ui-call",
"line": 416,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Your personal AI assistant. Exfoliate! Exfoliate!",
"source": "Your personal AI assistant.\nExfoliate! Exfoliate!",
"surface": "android",
"id": "native.android.ac4ab5cb08ab8746"
"id": "native.android.57eade577dad4d30"
},
{
"kind": "ui-property",
@@ -1333,9 +1333,9 @@
"kind": "ui-call",
"line": 790,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "These permissions keep OpenClaw secure and useful.",
"source": "These permissions keep OpenClaw secure\nand useful.",
"surface": "android",
"id": "native.android.ffdde83c5cd3b716"
"id": "native.android.405adf25f42a55a1"
},
{
"kind": "ui-property",
@@ -1429,9 +1429,9 @@
"kind": "ui-property",
"line": 1054,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Approve this phone on the gateway. Then retry the connection.",
"source": "Approve this phone on the gateway.\nThen retry the connection.",
"surface": "android",
"id": "native.android.851ad6ca68be9a7b"
"id": "native.android.7e1c48e774433f5c"
},
{
"kind": "ui-property",
@@ -1445,9 +1445,9 @@
"kind": "ui-property",
"line": 1058,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Gateway pairing worked. Approve this phone's node capabilities from an operator UI.",
"source": "Gateway pairing worked.\nApprove this phone's node capabilities from an operator UI.",
"surface": "android",
"id": "native.android.5f8a47dfbb4e65c1"
"id": "native.android.12c2219ca47b1401"
},
{
"kind": "ui-property",
@@ -1461,9 +1461,9 @@
"kind": "ui-property",
"line": 1062,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "Approval is in progress. OpenClaw will reconnect automatically.",
"source": "Approval is in progress.\nOpenClaw will reconnect automatically.",
"surface": "android",
"id": "native.android.e8a24b86aaa0df08"
"id": "native.android.53728f28e9193cb4"
},
{
"kind": "ui-property",
@@ -1493,9 +1493,9 @@
"kind": "ui-property",
"line": 1070,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/OnboardingFlow.kt",
"source": "We could not reach your Gateway. Let's fix this.",
"source": "We could not reach your Gateway.\nLet's fix this.",
"surface": "android",
"id": "native.android.5de7d12a0b6616a8"
"id": "native.android.8b38d0219be047d5"
},
{
"kind": "ui-property",
@@ -1565,9 +1565,9 @@
"kind": "ui-call",
"line": 90,
"path": "apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt",
"source": "Review provider readiness and configured models.",
"source": "Review provider readiness\nand configured models.",
"surface": "android",
"id": "native.android.557f23a9cd21d8dc"
"id": "native.android.86b9b6acdd3633ce"
},
{
"kind": "ui-property",
@@ -3169,6 +3169,14 @@
"surface": "apple",
"id": "native.apple.95300e4dfd7aad42"
},
{
"kind": "ui-call",
"line": 378,
"path": "apps/ios/Sources/Design/AgentProDreamingDestination.swift",
"source": "\\(entry.totalSignalCount)",
"surface": "apple",
"id": "native.apple.32c1207f3fb0ea37"
},
{
"kind": "ui-modifier",
"line": 32,
@@ -3193,6 +3201,22 @@
"surface": "apple",
"id": "native.apple.c0a8f74751fe7761"
},
{
"kind": "ui-call",
"line": 234,
"path": "apps/ios/Sources/Design/AgentProNodesDestination.swift",
"source": "Copy \\(title)",
"surface": "apple",
"id": "native.apple.58dafd47a9d00243"
},
{
"kind": "ui-modifier",
"line": 234,
"path": "apps/ios/Sources/Design/AgentProNodesDestination.swift",
"source": "Copy \\(title)",
"surface": "apple",
"id": "native.apple.4b2a40c2512edb6b"
},
{
"kind": "ui-call",
"line": 245,
@@ -3345,6 +3369,70 @@
"surface": "apple",
"id": "native.apple.efcb886f500e918d.114"
},
{
"kind": "ui-call",
"line": 170,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Install \\(result.displayName)",
"surface": "apple",
"id": "native.apple.b69fd83a32b7b549"
},
{
"kind": "ui-modifier",
"line": 170,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Install \\(result.displayName)",
"surface": "apple",
"id": "native.apple.a46408193c7d93e8"
},
{
"kind": "ui-call",
"line": 287,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Missing: \\(missing)",
"surface": "apple",
"id": "native.apple.7c9ea375c01972ee"
},
{
"kind": "ui-call",
"line": 293,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Setup: \\(install)",
"surface": "apple",
"id": "native.apple.61ebcf220ca6f7f4"
},
{
"kind": "ui-call",
"line": 312,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Set up \\(skill.displayName)",
"surface": "apple",
"id": "native.apple.305b98a10fc4f2ff"
},
{
"kind": "ui-modifier",
"line": 312,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Set up \\(skill.displayName)",
"surface": "apple",
"id": "native.apple.e94ab5a64ed0052b"
},
{
"kind": "ui-call",
"line": 321,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Edit \\(skill.displayName)",
"surface": "apple",
"id": "native.apple.16ff2932470c1a04"
},
{
"kind": "ui-modifier",
"line": 321,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Edit \\(skill.displayName)",
"surface": "apple",
"id": "native.apple.801febb8177c45d6"
},
{
"kind": "ui-modifier",
"line": 381,
@@ -3393,6 +3481,14 @@
"surface": "apple",
"id": "native.apple.07884c9a5b6dc1e4"
},
{
"kind": "ui-call",
"line": 526,
"path": "apps/ios/Sources/Design/AgentProTab+Skills.swift",
"source": "Missing: \\(missing)",
"surface": "apple",
"id": "native.apple.7c9ea375c01972ee.526"
},
{
"kind": "ui-call",
"line": 530,
@@ -3409,6 +3505,14 @@
"surface": "apple",
"id": "native.apple.a65066d19ed879fd"
},
{
"kind": "ui-call",
"line": 69,
"path": "apps/ios/Sources/Design/AgentProTab+Usage.swift",
"source": "\\(Self.compactNumber(day.totalTokens ?? 0)) tokens",
"surface": "apple",
"id": "native.apple.a17ce77200834d9c"
},
{
"kind": "ui-call",
"line": 55,
@@ -3441,6 +3545,22 @@
"surface": "apple",
"id": "native.apple.e8018adcccaa2a4d"
},
{
"kind": "ui-call",
"line": 116,
"path": "apps/ios/Sources/Design/CommandCenterTab.swift",
"source": "Gateway \\(self.gatewayStateText)",
"surface": "apple",
"id": "native.apple.2eedcda16e90fa8a"
},
{
"kind": "ui-modifier",
"line": 116,
"path": "apps/ios/Sources/Design/CommandCenterTab.swift",
"source": "Gateway \\(self.gatewayStateText)",
"surface": "apple",
"id": "native.apple.1dd03a218068f08e"
},
{
"kind": "ui-modifier",
"line": 117,
@@ -3513,6 +3633,14 @@
"surface": "apple",
"id": "native.apple.f343b3c8847ae5a6"
},
{
"kind": "ui-call",
"line": 144,
"path": "apps/ios/Sources/Design/IPadSkillWorkshopScreen.swift",
"source": "\\(self.filteredProposals.count) proposals",
"surface": "apple",
"id": "native.apple.57ea1dae1aa22723"
},
{
"kind": "ui-call",
"line": 157,
@@ -3777,6 +3905,14 @@
"surface": "apple",
"id": "native.apple.f3ab09d2ffba5d9b"
},
{
"kind": "ui-call",
"line": 180,
"path": "apps/ios/Sources/Design/IPadWorkboardScreen.swift",
"source": "\\(self.filteredCards.count) cards",
"surface": "apple",
"id": "native.apple.fb9e29033d18989e"
},
{
"kind": "ui-call",
"line": 196,
@@ -3841,6 +3977,22 @@
"surface": "apple",
"id": "native.apple.e2418405eb6a9908"
},
{
"kind": "ui-call",
"line": 332,
"path": "apps/ios/Sources/Design/IPadWorkboardScreen.swift",
"source": "Show \\(IPadWorkboardDefaults.label(for: status)) cards",
"surface": "apple",
"id": "native.apple.7b410ba26d2d83b2"
},
{
"kind": "ui-modifier",
"line": 332,
"path": "apps/ios/Sources/Design/IPadWorkboardScreen.swift",
"source": "Show \\(IPadWorkboardDefaults.label(for: status)) cards",
"surface": "apple",
"id": "native.apple.1025db84f77e09e2"
},
{
"kind": "ui-call",
"line": 337,
@@ -3945,6 +4097,14 @@
"surface": "apple",
"id": "native.apple.ac94e06cd1b5203a"
},
{
"kind": "ui-call",
"line": 1003,
"path": "apps/ios/Sources/Design/IPadWorkboardScreen.swift",
"source": "Move to \\(IPadWorkboardDefaults.label(for: status))",
"surface": "apple",
"id": "native.apple.774f595a01eca278"
},
{
"kind": "ui-call",
"line": 1012,
@@ -4009,6 +4169,14 @@
"surface": "apple",
"id": "native.apple.c1f2821d719e37f8.1132"
},
{
"kind": "ui-call",
"line": 1134,
"path": "apps/ios/Sources/Design/IPadWorkboardScreen.swift",
"source": "Move to \\(IPadWorkboardDefaults.label(for: status))",
"surface": "apple",
"id": "native.apple.774f595a01eca278.1134"
},
{
"kind": "ui-call",
"line": 1196,
@@ -4097,6 +4265,14 @@
"surface": "apple",
"id": "native.apple.62c19e63ba0e600a"
},
{
"kind": "ui-call",
"line": 97,
"path": "apps/ios/Sources/Design/OpenClawDocsScreen.swift",
"source": "v\\(DeviceInfoHelper.openClawVersionString())",
"surface": "apple",
"id": "native.apple.c589f3ed9e2505cc"
},
{
"kind": "ui-call",
"line": 402,
@@ -4113,6 +4289,22 @@
"surface": "apple",
"id": "native.apple.cf9bb65f8e405cc8"
},
{
"kind": "ui-call",
"line": 465,
"path": "apps/ios/Sources/Design/OpenClawProComponents.swift",
"source": "Gateway \\(self.title)",
"surface": "apple",
"id": "native.apple.6552beb81114fa49"
},
{
"kind": "ui-modifier",
"line": 465,
"path": "apps/ios/Sources/Design/OpenClawProComponents.swift",
"source": "Gateway \\(self.title)",
"surface": "apple",
"id": "native.apple.51c566ed34b67acf"
},
{
"kind": "ui-modifier",
"line": 30,
@@ -4121,6 +4313,22 @@
"surface": "apple",
"id": "native.apple.a2d8e7b4dba29764"
},
{
"kind": "ui-call",
"line": 118,
"path": "apps/ios/Sources/Design/RootTabsPhoneControlHub.swift",
"source": "Gateway \\(self.gatewayStateText)",
"surface": "apple",
"id": "native.apple.8d9b28f827f013a8"
},
{
"kind": "ui-modifier",
"line": 118,
"path": "apps/ios/Sources/Design/RootTabsPhoneControlHub.swift",
"source": "Gateway \\(self.gatewayStateText)",
"surface": "apple",
"id": "native.apple.b050fa88ddfab280"
},
{
"kind": "ui-modifier",
"line": 119,
@@ -4129,6 +4337,14 @@
"surface": "apple",
"id": "native.apple.597471e86dda3d38"
},
{
"kind": "ui-call",
"line": 184,
"path": "apps/ios/Sources/Design/RootTabsPhoneControlHub.swift",
"source": "v\\(DeviceInfoHelper.openClawVersionString())",
"surface": "apple",
"id": "native.apple.77d9ff112b9d70ad"
},
{
"kind": "ui-call",
"line": 38,
@@ -4929,6 +5145,14 @@
"surface": "apple",
"id": "native.apple.f21a8e304b607dc8"
},
{
"kind": "ui-call",
"line": 39,
"path": "apps/ios/Sources/Gateway/GatewayProblemView.swift",
"source": "Request ID: \\(requestId)",
"surface": "apple",
"id": "native.apple.9958308c545765cc"
},
{
"kind": "ui-call",
"line": 54,
@@ -5729,6 +5953,22 @@
"surface": "apple",
"id": "native.apple.c23d35de8d70863f"
},
{
"kind": "ui-call",
"line": 292,
"path": "apps/ios/Sources/RootTabs.swift",
"source": "OpenClaw \\(self.sidebarGatewayStatusTitle)",
"surface": "apple",
"id": "native.apple.fe50072094141b8d"
},
{
"kind": "ui-modifier",
"line": 292,
"path": "apps/ios/Sources/RootTabs.swift",
"source": "OpenClaw \\(self.sidebarGatewayStatusTitle)",
"surface": "apple",
"id": "native.apple.39042da9fc187030"
},
{
"kind": "ui-call",
"line": 329,
@@ -5737,6 +5977,14 @@
"surface": "apple",
"id": "native.apple.c50d02be6bd4818d"
},
{
"kind": "ui-call",
"line": 333,
"path": "apps/ios/Sources/RootTabs.swift",
"source": "v\\(DeviceInfoHelper.openClawVersionString())",
"surface": "apple",
"id": "native.apple.f4f6d9a52238752e"
},
{
"kind": "ui-call",
"line": 562,
@@ -5905,6 +6153,22 @@
"surface": "apple",
"id": "native.apple.5ac0c79487a492b4"
},
{
"kind": "ui-call",
"line": 34,
"path": "apps/macos/Sources/OpenClaw/AboutSettings.swift",
"source": "Version \\(self.versionString)",
"surface": "apple",
"id": "native.apple.383d9c0a8f5f4f7e"
},
{
"kind": "ui-call",
"line": 37,
"path": "apps/macos/Sources/OpenClaw/AboutSettings.swift",
"source": "Built \\(buildTimestamp)\\(self.buildSuffix)",
"surface": "apple",
"id": "native.apple.33f4ac3e111b264f"
},
{
"kind": "ui-call",
"line": 41,
@@ -6145,6 +6409,14 @@
"surface": "apple",
"id": "native.apple.4d0dfdb0ac98fb47"
},
{
"kind": "ui-call",
"line": 145,
"path": "apps/macos/Sources/OpenClaw/ChannelsSettings+View.swift",
"source": "Last check \\(self.channelLastCheckText(channel))",
"surface": "apple",
"id": "native.apple.b4bc7f2d70f7d6f6"
},
{
"kind": "ui-call",
"line": 149,
@@ -6281,6 +6553,22 @@
"surface": "apple",
"id": "native.apple.47eb7fbdc9792b54"
},
{
"kind": "ui-call",
"line": 34,
"path": "apps/macos/Sources/OpenClaw/CostUsageMenuView.swift",
"source": "Last \\(self.summary.days)d",
"surface": "apple",
"id": "native.apple.ebfc6af133da68bf"
},
{
"kind": "ui-call",
"line": 77,
"path": "apps/macos/Sources/OpenClaw/CostUsageMenuView.swift",
"source": "Partial: \\(self.summary.totals.missingCostEntries) entries missing cost",
"surface": "apple",
"id": "native.apple.936bfd42a2f08232"
},
{
"kind": "ui-call",
"line": 93,
@@ -6729,6 +7017,14 @@
"surface": "apple",
"id": "native.apple.7f5f9b82bb18d061"
},
{
"kind": "ui-call",
"line": 139,
"path": "apps/macos/Sources/OpenClaw/CronSettings+Layout.swift",
"source": "Error: \\(err)",
"surface": "apple",
"id": "native.apple.62a13e9cad6985af"
},
{
"kind": "ui-call",
"line": 167,
@@ -6889,6 +7185,14 @@
"surface": "apple",
"id": "native.apple.8ec0a4219e5e76ce"
},
{
"kind": "ui-call",
"line": 117,
"path": "apps/macos/Sources/OpenClaw/CronSettings+Rows.swift",
"source": "\\(date.formatted(date: .abbreviated, time: .standard)) · \\(relativeAge(from: date))",
"surface": "apple",
"id": "native.apple.7718fbae883d5389"
},
{
"kind": "ui-call",
"line": 123,
@@ -6921,6 +7225,14 @@
"surface": "apple",
"id": "native.apple.1d31c7c3dc040e9e"
},
{
"kind": "ui-call",
"line": 185,
"path": "apps/macos/Sources/OpenClaw/CronSettings+Rows.swift",
"source": "\\(ms)ms",
"surface": "apple",
"id": "native.apple.6ec996f25c175bbc"
},
{
"kind": "ui-call",
"line": 211,
@@ -6929,6 +7241,14 @@
"surface": "apple",
"id": "native.apple.07c987127cde7927"
},
{
"kind": "ui-call",
"line": 68,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "Kill \\(listener.command) (\\(listener.pid))?",
"surface": "apple",
"id": "native.apple.4c70e8fb1c642be1"
},
{
"kind": "ui-call",
"line": 69,
@@ -6953,6 +7273,14 @@
"surface": "apple",
"id": "native.apple.85986510973b69a5"
},
{
"kind": "ui-call",
"line": 89,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "When enabled, OpenClaw won't install or manage \\(gatewayLaunchdLabel).",
"surface": "apple",
"id": "native.apple.1982d180ff261216"
},
{
"kind": "ui-call",
"line": 106,
@@ -6993,6 +7321,14 @@
"surface": "apple",
"id": "native.apple.50a498bb5d21fce5"
},
{
"kind": "ui-call",
"line": 168,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "\\(ProcessInfo.processInfo.processIdentifier)",
"surface": "apple",
"id": "native.apple.a1b7117088ad315f"
},
{
"kind": "ui-call",
"line": 171,
@@ -7161,6 +7497,30 @@
"surface": "apple",
"id": "native.apple.f41a77907a653c26"
},
{
"kind": "ui-call",
"line": 349,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "Check which process owns \\(GatewayEnvironment.gatewayPort()) and suggest fixes.",
"surface": "apple",
"id": "native.apple.7d3bb8db32ac31b8"
},
{
"kind": "ui-call",
"line": 355,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "Port \\(report.port)",
"surface": "apple",
"id": "native.apple.b5c922d5a81b9a82"
},
{
"kind": "ui-call",
"line": 364,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "\\(listener.command) (\\(listener.pid))",
"surface": "apple",
"id": "native.apple.0dbd56f870683617"
},
{
"kind": "ui-call",
"line": 369,
@@ -7361,6 +7721,22 @@
"surface": "apple",
"id": "native.apple.a4e7bea688bf372c"
},
{
"kind": "ui-call",
"line": 578,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "eval → \\(canvasEvalResult)",
"surface": "apple",
"id": "native.apple.ad26da5399b2e89a"
},
{
"kind": "ui-call",
"line": 587,
"path": "apps/macos/Sources/OpenClaw/DebugSettings.swift",
"source": "snapshot → \\(canvasSnapshotPath)",
"surface": "apple",
"id": "native.apple.2fa497069eba7671"
},
{
"kind": "ui-call",
"line": 593,
@@ -7417,6 +7793,22 @@
"surface": "apple",
"id": "native.apple.ac15433d7c66db1a"
},
{
"kind": "ui-call",
"line": 354,
"path": "apps/macos/Sources/OpenClaw/DevicePairingApprovalPrompter.swift",
"source": "\\(label):",
"surface": "apple",
"id": "native.apple.4c4cb5589f9c56b2"
},
{
"kind": "ui-call",
"line": 372,
"path": "apps/macos/Sources/OpenClaw/DevicePairingApprovalPrompter.swift",
"source": "• \\(text)",
"surface": "apple",
"id": "native.apple.1b1ad7c8d65069fe"
},
{
"kind": "ui-call",
"line": 24,
@@ -7465,6 +7857,14 @@
"surface": "apple",
"id": "native.apple.7fe6df69d8050832"
},
{
"kind": "ui-call",
"line": 244,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "\\(Int(ping)) ms",
"surface": "apple",
"id": "native.apple.8d5db3462778dd6f"
},
{
"kind": "ui-call",
"line": 307,
@@ -7617,6 +8017,38 @@
"surface": "apple",
"id": "native.apple.5e3968d04d63200c"
},
{
"kind": "ui-call",
"line": 627,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "Installed: \\(gatewayVersion) · Required: \\(required)",
"surface": "apple",
"id": "native.apple.9ff8bc297026d7cb"
},
{
"kind": "ui-call",
"line": 631,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "Gateway \\(gatewayVersion) detected",
"surface": "apple",
"id": "native.apple.6a9514b81425ea1d"
},
{
"kind": "ui-call",
"line": 637,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "Node \\(node)",
"surface": "apple",
"id": "native.apple.4593770894a0b662"
},
{
"kind": "ui-call",
"line": 649,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "Last failure: \\(failure)",
"surface": "apple",
"id": "native.apple.50ab01059b763acd"
},
{
"kind": "ui-call",
"line": 654,
@@ -7625,6 +8057,14 @@
"surface": "apple",
"id": "native.apple.c55734a4ee849a4c"
},
{
"kind": "ui-call",
"line": 657,
"path": "apps/macos/Sources/OpenClaw/GeneralSettings.swift",
"source": "Gateway auto-starts in local mode via launchd (\\(gatewayLaunchdLabel)).",
"surface": "apple",
"id": "native.apple.8fcaa10d4558a03d"
},
{
"kind": "ui-call",
"line": 712,
@@ -7641,6 +8081,14 @@
"surface": "apple",
"id": "native.apple.6393591d17837eb0"
},
{
"kind": "ui-call",
"line": 17,
"path": "apps/macos/Sources/OpenClaw/InstancesSettings.swift",
"source": "Error: \\(err)",
"surface": "apple",
"id": "native.apple.729f356a45366d00"
},
{
"kind": "ui-call",
"line": 24,
@@ -7673,6 +8121,30 @@
"surface": "apple",
"id": "native.apple.d49a2a06f0b30967"
},
{
"kind": "ui-modifier",
"line": 171,
"path": "apps/macos/Sources/OpenClaw/InstancesSettings.swift",
"source": "Presence updated \\(inst.ageDescription).",
"surface": "apple",
"id": "native.apple.231b8e86486fd129"
},
{
"kind": "ui-call",
"line": 172,
"path": "apps/macos/Sources/OpenClaw/InstancesSettings.swift",
"source": "\\(status.label) presence",
"surface": "apple",
"id": "native.apple.7017ebe54c8e3da3"
},
{
"kind": "ui-modifier",
"line": 172,
"path": "apps/macos/Sources/OpenClaw/InstancesSettings.swift",
"source": "\\(status.label) presence",
"surface": "apple",
"id": "native.apple.12d83e5f01c98fc0"
},
{
"kind": "ui-call",
"line": 441,
@@ -7953,6 +8425,14 @@
"surface": "apple",
"id": "native.apple.3e248379359c7593"
},
{
"kind": "ui-call",
"line": 284,
"path": "apps/macos/Sources/OpenClaw/NodesMenu.swift",
"source": "\\(self.label):",
"surface": "apple",
"id": "native.apple.4443962db00a2def"
},
{
"kind": "ui-call",
"line": 91,
@@ -8273,6 +8753,14 @@
"surface": "apple",
"id": "native.apple.5ced9b0fad1555e0"
},
{
"kind": "ui-call",
"line": 669,
"path": "apps/macos/Sources/OpenClaw/OnboardingView+Pages.swift",
"source": "Installed at \\(loc)",
"surface": "apple",
"id": "native.apple.e6a9668517354178"
},
{
"kind": "ui-call",
"line": 694,
@@ -8409,6 +8897,14 @@
"surface": "apple",
"id": "native.apple.e4b94f54e8bdbde4"
},
{
"kind": "ui-call",
"line": 905,
"path": "apps/macos/Sources/OpenClaw/OnboardingView+Pages.swift",
"source": "Details: \\(error)",
"surface": "apple",
"id": "native.apple.b6de2a51e5fb8397"
},
{
"kind": "ui-call",
"line": 911,
@@ -8601,6 +9097,14 @@
"surface": "apple",
"id": "native.apple.c8a3879230179938"
},
{
"kind": "ui-call",
"line": 33,
"path": "apps/macos/Sources/OpenClaw/SessionMenuLabelView.swift",
"source": "\\(self.row.tokens.contextSummaryShort) · \\(self.row.ageText)",
"surface": "apple",
"id": "native.apple.c83f50f9eafa4e4a"
},
{
"kind": "ui-call",
"line": 39,
@@ -8657,6 +9161,22 @@
"surface": "apple",
"id": "native.apple.05918601c3b3b241"
},
{
"kind": "ui-call",
"line": 138,
"path": "apps/macos/Sources/OpenClaw/SettingsRootView.swift",
"source": "Config: \\(configPath)",
"surface": "apple",
"id": "native.apple.deb89a876875cb48"
},
{
"kind": "ui-call",
"line": 139,
"path": "apps/macos/Sources/OpenClaw/SettingsRootView.swift",
"source": "State: \\(stateDir)",
"surface": "apple",
"id": "native.apple.e20f8f3494d04da8"
},
{
"kind": "ui-call",
"line": 69,
@@ -8665,6 +9185,14 @@
"surface": "apple",
"id": "native.apple.6a9cf4d0e171abb0"
},
{
"kind": "ui-call",
"line": 78,
"path": "apps/macos/Sources/OpenClaw/SkillsSettings.swift",
"source": "\\(total)",
"surface": "apple",
"id": "native.apple.79d4590049b0a8f2"
},
{
"kind": "ui-call",
"line": 106,
@@ -8729,6 +9257,14 @@
"surface": "apple",
"id": "native.apple.4dc7c4fc6c93d9d7.484"
},
{
"kind": "ui-call",
"line": 602,
"path": "apps/macos/Sources/OpenClaw/SkillsSettings.swift",
"source": "Saved to openclaw.json under skills.entries.\\(self.editor.skillKey)",
"surface": "apple",
"id": "native.apple.d769a8ac65441d48"
},
{
"kind": "ui-call",
"line": 606,
@@ -8849,6 +9385,30 @@
"surface": "apple",
"id": "native.apple.e98b56cbbe3a9cae"
},
{
"kind": "ui-call",
"line": 341,
"path": "apps/macos/Sources/OpenClaw/SystemRunSettingsView.swift",
"source": "Last used \\(Self.relativeFormatter.localizedString(for: date, relativeTo: Date()))",
"surface": "apple",
"id": "native.apple.61954e6ed7118ddb"
},
{
"kind": "ui-call",
"line": 347,
"path": "apps/macos/Sources/OpenClaw/SystemRunSettingsView.swift",
"source": "Last command: \\(lastUsedCommand)",
"surface": "apple",
"id": "native.apple.29f7d0d5d832b577"
},
{
"kind": "ui-call",
"line": 353,
"path": "apps/macos/Sources/OpenClaw/SystemRunSettingsView.swift",
"source": "Resolved path: \\(lastResolvedPath)",
"surface": "apple",
"id": "native.apple.0ac3d7bc8c69e6a2"
},
{
"kind": "ui-call",
"line": 104,
@@ -9081,6 +9641,14 @@
"surface": "apple",
"id": "native.apple.b5868ea893d6a974"
},
{
"kind": "ui-call",
"line": 577,
"path": "apps/macos/Sources/OpenClaw/VoiceWakeSettings.swift",
"source": "\\(self.friendlyName(for: current)) (System)",
"surface": "apple",
"id": "native.apple.d57fd5213daf2a6e"
},
{
"kind": "ui-call",
"line": 597,
@@ -9113,6 +9681,14 @@
"surface": "apple",
"id": "native.apple.87c3465e9398bc2f"
},
{
"kind": "ui-call",
"line": 861,
"path": "apps/macos/Sources/OpenClaw/VoiceWakeSettings.swift",
"source": "Language \\(self.index + 2)",
"surface": "apple",
"id": "native.apple.2f9a1ff3cb47a58a"
},
{
"kind": "ui-modifier",
"line": 878,
@@ -9137,6 +9713,14 @@
"surface": "apple",
"id": "native.apple.2bcc6f4eca98f7f2"
},
{
"kind": "ui-call",
"line": 30,
"path": "apps/macos/Sources/OpenClaw/VoiceWakeTestCard.swift",
"source": "Heard: \\(text)",
"surface": "apple",
"id": "native.apple.bcee3926c9672842"
},
{
"kind": "ui-call",
"line": 146,
@@ -9329,6 +9913,14 @@
"surface": "apple",
"id": "native.apple.6b18ea1d85b5d3a2"
},
{
"kind": "ui-call",
"line": 672,
"path": "apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatMessageViews.swift",
"source": "\\(display.emoji) \\(display.label)",
"surface": "apple",
"id": "native.apple.7c99becc26501014"
},
{
"kind": "ui-modifier",
"line": 30,

View File

@@ -608,6 +608,7 @@ function buildSystemPrompt(targetLocale: string, glossary: readonly GlossaryEntr
"- The JSON must be an object whose keys exactly match the provided ids.",
"- Translate all English prose; keep code, URLs, product names, CLI commands, config keys, and env vars in English.",
"- Preserve placeholders exactly, including {count}, {time}, {shown}, {total}, and similar tokens.",
"- Preserve Swift interpolation expressions such as \\(name) exactly, including the backslash and parentheses.",
"- Preserve punctuation, ellipses, arrows, and casing when they are part of literal UI text.",
"- Preserve Markdown, inline code, HTML tags, and slash commands when present.",
"- Use fluent, neutral product UI language.",

View File

@@ -62,6 +62,19 @@ const EXCLUDED_PATH_RE =
/(?:^|[\\/])(?:Tests?|UITests?|test|Preview(?:s)?)(?:$|[\\/])/u;
const EXCLUDED_FILE_RE = /(?:Tests?|UITests?|Previews?|Testing)\.(?:swift|kt|kts)$/u;
function hasUnbalancedSwiftInterpolation(source: string): boolean {
let depth = 0;
for (let index = 0; index < source.length; index += 1) {
if (source[index] === "\\" && source[index + 1] === "(") {
depth += 1;
index += 1;
} else if (depth > 0 && source[index] === ")") {
depth -= 1;
}
}
return depth !== 0;
}
function lineNumber(source: string, offset: number): number {
return source.slice(0, offset).split("\n").length;
}
@@ -75,7 +88,7 @@ function decodeLiteral(raw: string): string {
}
function normalizeSource(source: string): string {
return source.replace(/\s+/gu, " ").trim();
return source.replace(/[ \t]+/gu, " ").trim();
}
function addCandidate(
@@ -90,7 +103,11 @@ function addCandidate(
if (!normalized || !/\p{L}/u.test(normalized)) {
return;
}
if (normalized.length > 500 || normalized.includes("${") || normalized.includes("\\(")) {
if (
normalized.length > 500 ||
normalized.includes("${") ||
hasUnbalancedSwiftInterpolation(normalized)
) {
return;
}
entries.push({ kind, line, path: repoPath, source: normalized, surface });

View File

@@ -21,6 +21,7 @@ describe("native app i18n inventory", () => {
),
).toBe(true);
expect(entries.some((entry) => entry.source === "QR Scanner Unavailable")).toBe(true);
expect(entries.some((entry) => entry.source === "Request ID: \\(requestId)")).toBe(true);
expect(NATIVE_I18N_LOCALES).toHaveLength(20);
});
});