Conversation
Adds LoopFollow/Resources/Localizable.xcstrings (source language en) and registers tr in knownRegions. Keys come from xcodebuild -exportLocalizations plus a scan of SwiftUI LocalizedStringKey call sites (Toggle, Picker, Section, Label, navigationTitle, ...) that the extractor does not emit; those are marked extractionState "manual". No translations yet. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 345c02582e5878ba12922177d89edbf96ef836f7)
Fails until every translatable key has a Turkish value; also checks printf placeholders and stale keys. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 38286cfcb1ae0da53444786b2cc326e75318f23b)
AlarmType.rawValue and the day/night option raw values are persisted, so they must stay English. Add AlarmType.displayName and make DayNightDisplayable.displayName an explicit localized switch; route the tile, editor title, list and add-sheet search, notification title and default alarm name through them. Tests pin the raw values. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit ca2276f80102049c02f5e88cc3b3829725e0c3dc)
Fills the tr locale of Localizable.xcstrings for every extracted key, marks units, symbols and product names as do-not-translate, and adds two small scripts for listing and applying translations from TSV. Two call sites are adjusted so they can be localized at all: the "minute(s) ago" plural suffix becomes a plural variation on a single "%lld minutes ago" key, and three alarm-editor footers that joined two literals with "+" (which selects the non-localized Text overload) are single literals again. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 0f417a115c1b09b3444112935a19b5ee8185b231)
…er don't-translate set
- AlarmSettingsView's day/night footer joined three literals with "+",
which selects the non-localized Text overload; merge into one literal
and translate the whole footer. Drop the dead fragment and "(" keys.
- Add a source lint test that fails on Text("a" + "b") patterns.
- Require positional indexes (%1$@, %2$@) in every multi-placeholder
translation so argument order can be changed safely; update the five
affected Turkish values.
- Keep shouldTranslate=false only for units, symbols, bare specifiers and
hashtags; ordinary terms that happen to match in Turkish get an explicit
translation so other languages can translate them.
- Verify the English plural variation at runtime from en.lproj.
- Fix "Snoozed until %@" (argument is a time, not a date) and refine
"Proactive Low" and the "Remote" title.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Member
|
Thanks for putting this together, and for the Turkish translation! Users have been asking for LoopFollow in their own language, so we know there's demand. We won't merge this as it stands, though. Before we take on localization, we want form a strategy for how translations are added, reviewed and kept up to date across releases. We'll come back to this once that's settled, and your work here will be a useful input. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a String Catalog (
LoopFollow/Resources/Localizable.xcstrings, source languageen) and registerstrso Loop Follow follows the device language. This is the first of three focused PRs: infrastructure plus every SwiftUI string. Dynamic strings (Text(variable), UIKit, enum names) and notifications / Live Activity / Info.plist follow in two further PRs.Opened as a draft while the Turkish copy is reviewed by a native speaker on a TestFlight build; the code and tests are final.
Changes
Localizable.xcstringswith Turkish values for all 548 keys; units, symbols, bare format specifiers and hashtags are marked "Don't translate". Terms that happen to be identical in Turkish (Bolus, IOB, Override, ...) carry an explicit translation so other languages can still translate them.AlarmType.displayNameand an explicit localizedDayNightDisplayable.displayName. The persistedrawValues stay English and are no longer shown directly (tile, editor title, list and add-sheet search, notification title, default alarm name).Text("Calculated \(n) minute\(s) ago")becomes a single%lld minutes agokey with an English plural variation, and four footers that joined literals with+(which selects the non-localizedTextoverload) are single literals again.Scripts/localization/missing_translations.pyandapply_translations.py: TSV round-trip helpers for translators (no build dependency; plain Python 3).Text("a" + "b"), persisted raw values pinned, and Turkish / English-plural lookups from the compiled bundle.Notes for maintainers
xcodebuild -exportLocalizationsonly emittedText("…")literals here, soToggle,Picker,Section,Label,TextField,navigationTitleandalertliterals (185 keys) were added from a source scan withextractionState: "manual". A build in Xcode may re-extract them; if it does, the marker can simply be dropped. Runtime lookup for these was verified on a simulator (Button("Skip")renders as "Atla").Testing
Teststarget: 106 passed, 0 failed (iOS 27 simulator).--lintclean.-AppleLanguages (tr): first screen renders Turkish for both extracted and manually added keys.🤖 Generated with Claude Code