diff --git a/apps/.i18n/native-source.json b/apps/.i18n/native-source.json index dc6fb93d9fa6..3144c96915d2 100644 --- a/apps/.i18n/native-source.json +++ b/apps/.i18n/native-source.json @@ -5577,14 +5577,6 @@ "surface": "apple", "id": "native.apple.95300e4dfd7aad42" }, - { - "kind": "ui-call", - "line": 306, - "path": "apps/ios/Sources/Design/AgentProDreamingDestination.swift", - "source": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")", - "surface": "apple", - "id": "native.apple.21d92f01c5cc2412" - }, { "kind": "ui-named-argument", "line": 343, diff --git a/apps/.i18n/native/de.json b/apps/.i18n/native/de.json index cdf960f8a8a4..cda35687cff2 100644 --- a/apps/.i18n/native/de.json +++ b/apps/.i18n/native/de.json @@ -3488,11 +3488,6 @@ "source": "Dream diary day", "translated": "Traumtagebuch-Tag" }, - { - "id": "native.apple.21d92f01c5cc2412", - "source": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")", - "translated": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")" - }, { "id": "native.apple.f0df95f0790fe675", "source": "Connect a gateway to load dreaming entries.", diff --git a/apps/.i18n/native/es.json b/apps/.i18n/native/es.json index 2a27d6f71093..bbee3cb835de 100644 --- a/apps/.i18n/native/es.json +++ b/apps/.i18n/native/es.json @@ -3488,11 +3488,6 @@ "source": "Dream diary day", "translated": "Día del diario de sueños" }, - { - "id": "native.apple.21d92f01c5cc2412", - "source": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")", - "translated": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")" - }, { "id": "native.apple.f0df95f0790fe675", "source": "Connect a gateway to load dreaming entries.", diff --git a/apps/.i18n/native/zh-CN.json b/apps/.i18n/native/zh-CN.json index 876c734e90b5..23b8d5603b6e 100644 --- a/apps/.i18n/native/zh-CN.json +++ b/apps/.i18n/native/zh-CN.json @@ -3488,11 +3488,6 @@ "source": "Dream diary day", "translated": "梦境日记日期" }, - { - "id": "native.apple.21d92f01c5cc2412", - "source": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")", - "translated": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")" - }, { "id": "native.apple.f0df95f0790fe675", "source": "Connect a gateway to load dreaming entries.", diff --git a/apps/.i18n/native/zh-TW.json b/apps/.i18n/native/zh-TW.json index 2e3887f017f2..29df2833a08d 100644 --- a/apps/.i18n/native/zh-TW.json +++ b/apps/.i18n/native/zh-TW.json @@ -3488,11 +3488,6 @@ "source": "Dream diary day", "translated": "Dream diary 日期" }, - { - "id": "native.apple.21d92f01c5cc2412", - "source": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")", - "translated": "\\(day.entryCount) \\(day.entryCount == 1 ? \"entry\" : \"entries\")" - }, { "id": "native.apple.f0df95f0790fe675", "source": "Connect a gateway to load dreaming entries.", diff --git a/scripts/native-app-i18n.ts b/scripts/native-app-i18n.ts index 1eb6a35110d1..32b2b1bd5407 100644 --- a/scripts/native-app-i18n.ts +++ b/scripts/native-app-i18n.ts @@ -176,6 +176,9 @@ function isTranslatableCandidate(source: string, kind: string): boolean { return false; } BUILD_SETTING_RE.lastIndex = 0; + if (hasQuotedConditionalSwiftInterpolation(source)) { + return false; + } const isDirectUiText = kind.startsWith("ui-") || kind.startsWith("resource-"); if (!isDirectUiText && (/^[a-z0-9_.:/$-]+$/u.test(source) || /^[A-Z0-9_.:/$-]+$/u.test(source))) { return false; @@ -189,6 +192,18 @@ function isTranslatableCandidate(source: string, kind: string): boolean { return kind !== "plist-string" || /\s/u.test(source); } +function hasQuotedConditionalSwiftInterpolation(source: string): boolean { + return ( + extractSwiftInterpolations(source)?.some( + (interpolation) => + /\?\s*"((?:\\.|[^"\\])*)"\s*:\s*"((?:\\.|[^"\\])*)"/u.test(interpolation) || + /\bif\b[\s\S]*"((?:\\.|[^"\\])*)"[\s\S]*\belse\b[\s\S]*"((?:\\.|[^"\\])*)"/u.test( + interpolation, + ), + ) ?? false + ); +} + function extractSwiftInterpolations(source: string): string[] | null { const values: string[] = []; for (let index = 0; index < source.length; index += 1) { diff --git a/test/scripts/native-app-i18n.test.ts b/test/scripts/native-app-i18n.test.ts index 7b39c341da11..c9e3a17af78b 100644 --- a/test/scripts/native-app-i18n.test.ts +++ b/test/scripts/native-app-i18n.test.ts @@ -91,7 +91,7 @@ describe("native app i18n inventory", () => { (entry) => entry.source === '\\(day.entryCount) \\(day.entryCount == 1 ? "entry" : "entries")', ), - ).toBe(true); + ).toBe(false); expect( entries.some( (entry) =>