diff --git a/apps/.i18n/native-source.json b/apps/.i18n/native-source.json index 825d7f7f0af..fe8fb3b14db 100644 --- a/apps/.i18n/native-source.json +++ b/apps/.i18n/native-source.json @@ -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, diff --git a/scripts/control-ui-i18n.ts b/scripts/control-ui-i18n.ts index c98326fefbf..7815286e6e1 100644 --- a/scripts/control-ui-i18n.ts +++ b/scripts/control-ui-i18n.ts @@ -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.", diff --git a/scripts/native-app-i18n.ts b/scripts/native-app-i18n.ts index 2c8bc5fc300..ad5dd4c98d5 100644 --- a/scripts/native-app-i18n.ts +++ b/scripts/native-app-i18n.ts @@ -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 }); diff --git a/test/scripts/native-app-i18n.test.ts b/test/scripts/native-app-i18n.test.ts index 4258d0c0729..b59127d446b 100644 --- a/test/scripts/native-app-i18n.test.ts +++ b/test/scripts/native-app-i18n.test.ts @@ -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); }); });