Fix #21: Onboarding-Fragebogen lokalisiert + Skip-Button besser sichtbar

- PersonalityModels: Alle 30 QuizQuestion-Strings in String(localized:) gewrappt
  → Quiz nutzt jetzt korrekt die Lokaliserungsstrings (vorher: stale in xcstrings)
- PersonalityQuizView: "Überspringen"-Button in allen 3 Screens vereinheitlicht
  → .subheadline.weight(.medium) + .secondary statt caption/tertiary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-22 18:48:01 +02:00
parent 9ca54e6a82
commit 55991808cf
3 changed files with 37 additions and 63 deletions
+3 -29
View File
@@ -894,7 +894,6 @@
} }
}, },
"Auf einer Nachbarschaftsparty kennst du kaum jemanden." : { "Auf einer Nachbarschaftsparty kennst du kaum jemanden." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1588,7 +1587,6 @@
} }
}, },
"Du bist enttäuscht und brauchst Zeit, um dich neu zu sortieren." : { "Du bist enttäuscht und brauchst Zeit, um dich neu zu sortieren." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1599,7 +1597,6 @@
} }
}, },
"Du erklärst ehrlich, dass es dir gerade nicht passt." : { "Du erklärst ehrlich, dass es dir gerade nicht passt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1610,7 +1607,6 @@
} }
}, },
"Du erscheinst wie abgemacht dein Wort gilt." : { "Du erscheinst wie abgemacht dein Wort gilt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1621,7 +1617,6 @@
} }
}, },
"Du fragst dich, ob du etwas falsch gemacht hast, und das lässt dich nicht los." : { "Du fragst dich, ob du etwas falsch gemacht hast, und das lässt dich nicht los." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1632,7 +1627,6 @@
} }
}, },
"Du fragst kurz nach, ob es sich verschieben lässt." : { "Du fragst kurz nach, ob es sich verschieben lässt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1643,7 +1637,6 @@
} }
}, },
"Du gehst aktiv auf Fremde zu und fängst Gespräche an." : { "Du gehst aktiv auf Fremde zu und fängst Gespräche an." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1654,7 +1647,6 @@
} }
}, },
"Du gehst einfach hin Neugier auf fremde Menschen treibt dich." : { "Du gehst einfach hin Neugier auf fremde Menschen treibt dich." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1665,7 +1657,6 @@
} }
}, },
"Du genießt die Ruhe und tankst alleine auf." : { "Du genießt die Ruhe und tankst alleine auf." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1676,7 +1667,6 @@
} }
}, },
"Du hast einem Freund versprochen zu helfen. Am Morgen bist du müde." : { "Du hast einem Freund versprochen zu helfen. Am Morgen bist du müde." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1687,7 +1677,6 @@
} }
}, },
"Du hast es dir sofort notiert und planst etwas Besonderes." : { "Du hast es dir sofort notiert und planst etwas Besonderes." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1698,7 +1687,6 @@
} }
}, },
"Du hilfst trotzdem anderen etwas Gutes tun liegt dir." : { "Du hilfst trotzdem anderen etwas Gutes tun liegt dir." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1719,7 +1707,6 @@
} }
}, },
"Du meldest dich locker er ist wahrscheinlich einfach beschäftigt." : { "Du meldest dich locker er ist wahrscheinlich einfach beschäftigt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1730,7 +1717,6 @@
} }
}, },
"Du reagierst spontan, wenn der Tag kommt." : { "Du reagierst spontan, wenn der Tag kommt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1741,7 +1727,6 @@
} }
}, },
"Du rufst spontan Freunde an und organisierst ein Treffen." : { "Du rufst spontan Freunde an und organisierst ein Treffen." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1752,7 +1737,6 @@
} }
}, },
"Du sagst sofort zu neue Erfahrungen reizen dich." : { "Du sagst sofort zu neue Erfahrungen reizen dich." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1761,6 +1745,9 @@
} }
} }
} }
},
"Du schlägst lieber etwas vor, das ihr beide gut kennt." : {
}, },
"Du schlägt lieber etwas vor, das ihr beide gut kennt." : { "Du schlägt lieber etwas vor, das ihr beide gut kennt." : {
"extractionState" : "stale", "extractionState" : "stale",
@@ -1774,7 +1761,6 @@
} }
}, },
"Du sprichst deine Sorgen an, auch wenn es Spannung erzeugt." : { "Du sprichst deine Sorgen an, auch wenn es Spannung erzeugt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1785,7 +1771,6 @@
} }
}, },
"Du unterstützt ihn und behältst deine Bedenken für dich." : { "Du unterstützt ihn und behältst deine Bedenken für dich." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1796,7 +1781,6 @@
} }
}, },
"Du wartest, bis ein Bekannter mitkommt." : { "Du wartest, bis ein Bekannter mitkommt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1807,7 +1791,6 @@
} }
}, },
"Du wartest, bis jemand dich anspricht." : { "Du wartest, bis jemand dich anspricht." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1818,7 +1801,6 @@
} }
}, },
"Du zuckst die Schultern und findest schnell etwas anderes." : { "Du zuckst die Schultern und findest schnell etwas anderes." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1920,7 +1902,6 @@
} }
}, },
"Ein Freund erzählt von einem Plan, den du für einen Fehler hältst." : { "Ein Freund erzählt von einem Plan, den du für einen Fehler hältst." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1931,7 +1912,6 @@
} }
}, },
"Ein Freund schlägt spontan eine Aktivität vor, die du noch nie gemacht hast." : { "Ein Freund schlägt spontan eine Aktivität vor, die du noch nie gemacht hast." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -1942,7 +1922,6 @@
} }
}, },
"Ein Nachbar bittet um einen Gefallen, der dir gerade ungelegen kommt." : { "Ein Nachbar bittet um einen Gefallen, der dir gerade ungelegen kommt." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -2899,7 +2878,6 @@
} }
}, },
"In deinem Viertel gibt es ein neues Treffen niemand, den du kennst, ist dabei." : { "In deinem Viertel gibt es ein neues Treffen niemand, den du kennst, ist dabei." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -3677,7 +3655,6 @@
} }
}, },
"Nach einer anstrengenden Woche hast du einen freien Samstag." : { "Nach einer anstrengenden Woche hast du einen freien Samstag." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -3745,7 +3722,6 @@
} }
}, },
"Nächste Woche hat eine Freundin Geburtstag." : { "Nächste Woche hat eine Freundin Geburtstag." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -5253,7 +5229,6 @@
} }
}, },
"Verabredungen mit Freunden fallen kurzfristig aus." : { "Verabredungen mit Freunden fallen kurzfristig aus." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
@@ -5397,7 +5372,6 @@
} }
}, },
"Von einem guten Freund hast du zwei Wochen nichts gehört." : { "Von einem guten Freund hast du zwei Wochen nichts gehört." : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
+30 -30
View File
@@ -97,90 +97,90 @@ struct QuizQuestion: Identifiable {
QuizQuestion( QuizQuestion(
id: "O1", id: "O1",
dimension: .openness, dimension: .openness,
situation: "Ein Freund schlägt spontan eine Aktivität vor, die du noch nie gemacht hast.", situation: String(localized: "Ein Freund schlägt spontan eine Aktivität vor, die du noch nie gemacht hast."),
optionA: "Du sagst sofort zu neue Erfahrungen reizen dich.", optionA: String(localized: "Du sagst sofort zu neue Erfahrungen reizen dich."),
optionB: "Du schlägst lieber etwas vor, das ihr beide gut kennt.", optionB: String(localized: "Du schlägst lieber etwas vor, das ihr beide gut kennt."),
optionAScore: 1 optionAScore: 1
), ),
// Offenheit O2 // Offenheit O2
QuizQuestion( QuizQuestion(
id: "O2", id: "O2",
dimension: .openness, dimension: .openness,
situation: "In deinem Viertel gibt es ein neues Treffen niemand, den du kennst, ist dabei.", situation: String(localized: "In deinem Viertel gibt es ein neues Treffen niemand, den du kennst, ist dabei."),
optionA: "Du gehst einfach hin Neugier auf fremde Menschen treibt dich.", optionA: String(localized: "Du gehst einfach hin Neugier auf fremde Menschen treibt dich."),
optionB: "Du wartest, bis ein Bekannter mitkommt.", optionB: String(localized: "Du wartest, bis ein Bekannter mitkommt."),
optionAScore: 1 optionAScore: 1
), ),
// Verlässlichkeit C1 // Verlässlichkeit C1
QuizQuestion( QuizQuestion(
id: "C1", id: "C1",
dimension: .conscientiousness, dimension: .conscientiousness,
situation: "Du hast einem Freund versprochen zu helfen. Am Morgen bist du müde.", situation: String(localized: "Du hast einem Freund versprochen zu helfen. Am Morgen bist du müde."),
optionA: "Du erscheinst wie abgemacht dein Wort gilt.", optionA: String(localized: "Du erscheinst wie abgemacht dein Wort gilt."),
optionB: "Du fragst kurz nach, ob es sich verschieben lässt.", optionB: String(localized: "Du fragst kurz nach, ob es sich verschieben lässt."),
optionAScore: 1 optionAScore: 1
), ),
// Verlässlichkeit C2 // Verlässlichkeit C2
QuizQuestion( QuizQuestion(
id: "C2", id: "C2",
dimension: .conscientiousness, dimension: .conscientiousness,
situation: "Nächste Woche hat eine Freundin Geburtstag.", situation: String(localized: "Nächste Woche hat eine Freundin Geburtstag."),
optionA: "Du hast es dir sofort notiert und planst etwas Besonderes.", optionA: String(localized: "Du hast es dir sofort notiert und planst etwas Besonderes."),
optionB: "Du reagierst spontan, wenn der Tag kommt.", optionB: String(localized: "Du reagierst spontan, wenn der Tag kommt."),
optionAScore: 1 optionAScore: 1
), ),
// Geselligkeit E1 // Geselligkeit E1
QuizQuestion( QuizQuestion(
id: "E1", id: "E1",
dimension: .extraversion, dimension: .extraversion,
situation: "Nach einer anstrengenden Woche hast du einen freien Samstag.", situation: String(localized: "Nach einer anstrengenden Woche hast du einen freien Samstag."),
optionA: "Du rufst spontan Freunde an und organisierst ein Treffen.", optionA: String(localized: "Du rufst spontan Freunde an und organisierst ein Treffen."),
optionB: "Du genießt die Ruhe und tankst alleine auf.", optionB: String(localized: "Du genießt die Ruhe und tankst alleine auf."),
optionAScore: 1 optionAScore: 1
), ),
// Geselligkeit E2 // Geselligkeit E2
QuizQuestion( QuizQuestion(
id: "E2", id: "E2",
dimension: .extraversion, dimension: .extraversion,
situation: "Auf einer Nachbarschaftsparty kennst du kaum jemanden.", situation: String(localized: "Auf einer Nachbarschaftsparty kennst du kaum jemanden."),
optionA: "Du gehst aktiv auf Fremde zu und fängst Gespräche an.", optionA: String(localized: "Du gehst aktiv auf Fremde zu und fängst Gespräche an."),
optionB: "Du wartest, bis jemand dich anspricht.", optionB: String(localized: "Du wartest, bis jemand dich anspricht."),
optionAScore: 1 optionAScore: 1
), ),
// Verträglichkeit A1 // Verträglichkeit A1
QuizQuestion( QuizQuestion(
id: "A1", id: "A1",
dimension: .agreeableness, dimension: .agreeableness,
situation: "Ein Nachbar bittet um einen Gefallen, der dir gerade ungelegen kommt.", situation: String(localized: "Ein Nachbar bittet um einen Gefallen, der dir gerade ungelegen kommt."),
optionA: "Du hilfst trotzdem anderen etwas Gutes tun liegt dir.", optionA: String(localized: "Du hilfst trotzdem anderen etwas Gutes tun liegt dir."),
optionB: "Du erklärst ehrlich, dass es dir gerade nicht passt.", optionB: String(localized: "Du erklärst ehrlich, dass es dir gerade nicht passt."),
optionAScore: 1 optionAScore: 1
), ),
// Verträglichkeit A2 // Verträglichkeit A2
QuizQuestion( QuizQuestion(
id: "A2", id: "A2",
dimension: .agreeableness, dimension: .agreeableness,
situation: "Ein Freund erzählt von einem Plan, den du für einen Fehler hältst.", situation: String(localized: "Ein Freund erzählt von einem Plan, den du für einen Fehler hältst."),
optionA: "Du unterstützt ihn und behältst deine Bedenken für dich.", optionA: String(localized: "Du unterstützt ihn und behältst deine Bedenken für dich."),
optionB: "Du sprichst deine Sorgen an, auch wenn es Spannung erzeugt.", optionB: String(localized: "Du sprichst deine Sorgen an, auch wenn es Spannung erzeugt."),
optionAScore: 1 optionAScore: 1
), ),
// Ausgeglichenheit N1 (invertiert: A = stabil = hohes N-inverted) // Ausgeglichenheit N1 (invertiert: A = stabil = hohes N-inverted)
QuizQuestion( QuizQuestion(
id: "N1", id: "N1",
dimension: .neuroticism, dimension: .neuroticism,
situation: "Von einem guten Freund hast du zwei Wochen nichts gehört.", situation: String(localized: "Von einem guten Freund hast du zwei Wochen nichts gehört."),
optionA: "Du meldest dich locker er ist wahrscheinlich einfach beschäftigt.", optionA: String(localized: "Du meldest dich locker er ist wahrscheinlich einfach beschäftigt."),
optionB: "Du fragst dich, ob du etwas falsch gemacht hast, und das lässt dich nicht los.", optionB: String(localized: "Du fragst dich, ob du etwas falsch gemacht hast, und das lässt dich nicht los."),
optionAScore: 0 // A = emotional stabil = 0 Neurotizismus-Punkte optionAScore: 0 // A = emotional stabil = 0 Neurotizismus-Punkte
), ),
// Ausgeglichenheit N2 (invertiert) // Ausgeglichenheit N2 (invertiert)
QuizQuestion( QuizQuestion(
id: "N2", id: "N2",
dimension: .neuroticism, dimension: .neuroticism,
situation: "Verabredungen mit Freunden fallen kurzfristig aus.", situation: String(localized: "Verabredungen mit Freunden fallen kurzfristig aus."),
optionA: "Du zuckst die Schultern und findest schnell etwas anderes.", optionA: String(localized: "Du zuckst die Schultern und findest schnell etwas anderes."),
optionB: "Du bist enttäuscht und brauchst Zeit, um dich neu zu sortieren.", optionB: String(localized: "Du bist enttäuscht und brauchst Zeit, um dich neu zu sortieren."),
optionAScore: 0 // A = emotional stabil = 0 Neurotizismus-Punkte optionAScore: 0 // A = emotional stabil = 0 Neurotizismus-Punkte
), ),
] ]
+4 -4
View File
@@ -125,7 +125,7 @@ struct QuizIntroScreen: View {
Button(action: onSkip) { Button(action: onSkip) {
Text("Überspringen") Text("Überspringen")
.font(.subheadline) .font(.subheadline.weight(.medium))
.foregroundStyle(.secondary) .foregroundStyle(.secondary)
} }
.accessibilityLabel("Quiz überspringen") .accessibilityLabel("Quiz überspringen")
@@ -222,7 +222,7 @@ private struct GenderSelectionScreen: View {
Button(action: onSkip) { Button(action: onSkip) {
Text("Überspringen") Text("Überspringen")
.font(.subheadline) .font(.subheadline.weight(.medium))
.foregroundStyle(.secondary) .foregroundStyle(.secondary)
} }
.accessibilityLabel("Quiz überspringen") .accessibilityLabel("Quiz überspringen")
@@ -273,8 +273,8 @@ private struct QuizQuestionsScreen: View {
Button(action: skipCurrentQuestion) { Button(action: skipCurrentQuestion) {
Text("Überspringen") Text("Überspringen")
.font(NahbarInsightStyle.captionFont) .font(.subheadline.weight(.medium))
.foregroundStyle(.tertiary) .foregroundStyle(.secondary)
} }
.padding(.bottom, 32) .padding(.bottom, 32)
} }