Repository navigation
Improve the German localization of Android onboarding - #1029
Conversation
ryanbr
left a comment
There was a problem hiding this comment.
Good PR, and the premise checks out — the existing German was not merely stilted, it was broken. All checks green.
What was wrong before this:
- Register mixed inside a single string.
Kein WHOOP? **Du** kannst noch weitermachen. **Kombinieren Sie** einen Herzfrequenzgurtswitches from du to Sie mid-sentence. Across the file it wasEin privates Fenster in **Ihre** Genesungnext toall **deine** Daten. Genesungfor Recovery — that is convalescence from illness, not the fitness metric.Erholungis right.Riemenfor strap, a leather belt, where the rest of the app saysStrap.Leichtfor the Light theme. That is light-as-in-easy, not light-as-in-bright — the theme picker was offering "Easy".Hellfixes a real mistranslation, not a nuance.
The new copy is consistent: across the 84 added German lines there are zero formal Sie/Ihr and 35 informal du/dein.
Verified rather than assumed:
- Placeholders are safe. I checked all 83 string keys this PR touches, in all five locales.
%1$dis present and correctly positioned everywhere and%%is properly escaped. (My first pass flaggedonboarding_strap_bonded_batteryin every locale; that was my own regex reading% bin%% batteryas a specifier. False alarm.) - The
AppChangelog.ktchange is not what its filename suggests. Those fourExpectationentries are onboarding cards consumed byOnboardingScreen.kt:429, and their titles were already localized — only the bodies were hardcoded English. Localizing them is the consistent thing, andonboarding_expectation_*is the right name. I went looking for a "localized historical changelog text" problem and there isn't one. - No hardcoded UI copy left behind in
OnboardingScreen.kt.
One question, for a native speaker rather than me. Finde deinen Strap becomes Finde **dein** Strap, and Bevor du **dein** Strap verbindest is the same shape. Both are accusative, where a masculine Strap wants deinen. The catalogue is genuinely undecided — der Strap, den Strap, deinen Strap appear alongside das Strap — so this is not a clear error, and dein Strap is correct wherever it is nominative (Dein Strap ist gekoppelt). But if Strap is masculine, those two accusative uses regressed from something that was right. Worth settling the gender once and applying it, since you are already in here.
Nothing else blocking. Happy to merge on your word about the accusative.
|
@ryanbr Actual German tech usage appears to lean towards the masculine form, but WHOOP’s own German copy largely avoids the ambiguity by referring to the product as “WHOOP”, “WHOOP-Gerät” or “Band”. Before changing only the affected endings, could we therefore settle the intended terminology? WHOOP’s current English copy usually distinguishes between the WHOOP device or sensor and the band, although “WHOOP strap” still appears in some official copy. Should NOOP keep “Strap” as its broader project-wide term and use the masculine form consistently in German, or should WHOOP-specific user-facing strings follow WHOOP’s current terminology more closely — for example “WHOOP” or “WHOOP-Gerät” — while reserving terms such as “heart-rate strap” for generic third-party devices? Once that is decided, I can audit the affected German strings and prepare a consistent follow-up. |
|
@ryanbr any news on this one? |
Follows up #1029: 'der Strap' is masculine, so the nine accusative onboarding contexts take 'deinen Strap' (not 'dein Strap') and the pronoun 'es' becomes 'ihn'. Nominative/dative forms left untouched. Brings Android German into line with iOS, which already used the correct accusative. Android values-de only.
The active repo is the fork now, so repoint the user-facing/functional github links (the update check already pointed at ryanbr/noop): Code (compiles; testcentre tests 108 pass): - Settings → About "Project home & source" link (Android; iOS was already ryanbr). - Bug-report "issues/new" URL + its tests/comments (Android + iOS). - Donation link (Android + iOS) → ryanbr/noop/wiki/Donations. Docs: README badges/links (releases, stars, wiki/FAQ, issues, clone, star-history), docs/IOS.md + BUILD.md + CONTRIBUTING.md release links, docs/SAFEGUARDS.md operational gh command, and altstore-source.json owner (host/path only — asset filenames untouched). Deliberately LEFT as-is: the `NoopApplication` class name; provenance/credit comments (PR ryanbr#600, ryanbr#569, ryanbr#554, ryanbr#1029, "reimplemented under NoopApp"); historical changelog entries (AppChangelog, CHANGELOG.md, docs/releases/); and the `Copyright NoopApp` / PolyForm license attribution.
The German onboarding copy mixed registers inside single strings ("Du kannst noch weitermachen. Kombinieren Sie..."), and carried real mistranslations: Genesung for Recovery (convalescence from illness, not the fitness metric), Riemen for strap, and Leicht for the Light theme - light-as-in-easy, so the theme picker offered "Easy".
Onboarding copy that was still hardcoded moves into string resources, the German is rewritten to consistent informal wording, and the other supported locales get the same keys so coverage stays complete. The four Expectation cards in AppChangelog.kt are onboarding content consumed by OnboardingScreen; their titles were already localized and only the bodies were hardcoded English.
No BLE, protocol or analytics behaviour changes. Placeholders verified across all 83 touched keys in five locales.
Follows up ryanbr#1029: 'der Strap' is masculine, so the nine accusative onboarding contexts take 'deinen Strap' (not 'dein Strap') and the pronoun 'es' becomes 'ihn'. Nominative/dative forms left untouched. Brings Android German into line with iOS, which already used the correct accusative. Android values-de only.
What this PR does
Improves the German localization of the Android onboarding flow.
No BLE, protocol, analytics, or application behavior is changed.
Type of change
How it was tested
./gradlew assembleFullDebug./gradlew testFullDebugUnitTestThe Android build, unit tests, i18n audit, and source-hygiene check all passed in GitHub Actions. No BLE code was modified, so real-hardware testing was not applicable.
Checklist
swift testinPackages/<name>) — no Swift package was touchedandroid/(./gradlew testFullDebugUnitTest)StrandDesigntokens — no hardcoded colors, fonts, or spacingdocs/CONTRIBUTING.mdStrand.xcodeproj/) or any secrets/keystoresRelated issues
None.