diff --git a/PortfolioJournal/Resources/en.lproj/Localizable.strings b/PortfolioJournal/Resources/en.lproj/Localizable.strings index 8dbac06..36a653f 100644 --- a/PortfolioJournal/Resources/en.lproj/Localizable.strings +++ b/PortfolioJournal/Resources/en.lproj/Localizable.strings @@ -112,6 +112,16 @@ "feature_no_ads" = "No Ads"; "feature_no_ads_desc" = "Ad-free experience forever"; +// Paywall benefits (1.2.0) +"paywall_benefit_history_title" = "Your complete history"; +"paywall_benefit_history_subtitle" = "Every snapshot, contribution, and gain since day one"; +"paywall_benefit_charts_title" = "Charts that reveal patterns"; +"paywall_benefit_charts_subtitle" = "Allocation, drawdown, performance — all in one place"; +"paywall_benefit_forecasts_title" = "12-month forecasts"; +"paywall_benefit_forecasts_subtitle" = "See where your portfolio is likely heading"; +"paywall_benefit_noads_title" = "No ads, ever"; +"paywall_benefit_noads_subtitle" = "Clean, focused experience with no distractions"; + // MARK: - Settings "settings_title" = "Settings"; "subscription" = "Subscription"; @@ -177,6 +187,16 @@ "onboarding_sync_desc" = "Your data syncs automatically via iCloud across all your Apple devices."; "get_started" = "Get Started"; +// Onboarding pages (1.2.0) +"onboarding_clarity_title" = "Know exactly where you stand"; +"onboarding_clarity_desc" = "See your total wealth, real returns, and allocation — always up to date."; +"onboarding_habit_title" = "5 minutes a month is enough"; +"onboarding_habit_desc" = "Log your values once a month. Portfolio Journal handles the math and shows your progress."; +"onboarding_calm_title" = "Ignore the noise. Track the trend."; +"onboarding_calm_desc" = "Daily swings don't tell the real story. Your growth over months and years does."; +"onboarding_goals_title" = "Reach your financial goals"; +"onboarding_goals_desc" = "Set targets, track milestones, and see exactly how far you've come."; + // MARK: - Errors "error_generic" = "An error occurred. Please try again."; "error_no_purchases" = "No purchases found to restore"; diff --git a/PortfolioJournal/Resources/es-ES.lproj/Localizable.strings b/PortfolioJournal/Resources/es-ES.lproj/Localizable.strings index 0f5b2ca..63f1023 100644 --- a/PortfolioJournal/Resources/es-ES.lproj/Localizable.strings +++ b/PortfolioJournal/Resources/es-ES.lproj/Localizable.strings @@ -137,6 +137,26 @@ "Unlimited sources, advanced charts & more" = "Fuentes ilimitadas, gráficos avanzados y más"; "See full access" = "Ver acceso completo"; +// Paywall benefits (1.2.0) +"paywall_benefit_history_title" = "Tu historial completo"; +"paywall_benefit_history_subtitle" = "Cada snapshot, aportación y ganancia desde el primer día"; +"paywall_benefit_charts_title" = "Gráficos que revelan patrones"; +"paywall_benefit_charts_subtitle" = "Asignación, drawdown, rendimiento — todo en un lugar"; +"paywall_benefit_forecasts_title" = "Previsiones a 12 meses"; +"paywall_benefit_forecasts_subtitle" = "Ve a dónde se dirige tu cartera"; +"paywall_benefit_noads_title" = "Sin anuncios, nunca"; +"paywall_benefit_noads_subtitle" = "Una experiencia limpia y sin distracciones"; + +// MARK: - Onboarding pages (1.2.0) +"onboarding_clarity_title" = "Sabe exactamente dónde estás"; +"onboarding_clarity_desc" = "Consulta tu patrimonio total, rendimientos reales y distribución — siempre actualizado."; +"onboarding_habit_title" = "5 minutos al mes son suficientes"; +"onboarding_habit_desc" = "Registra tus valores una vez al mes. Portfolio Journal hace los cálculos y muestra tu progreso."; +"onboarding_calm_title" = "Ignora el ruido. Sigue la tendencia."; +"onboarding_calm_desc" = "Las variaciones diarias no cuentan la historia real. Tu crecimiento en meses y años sí."; +"onboarding_goals_title" = "Alcanza tus metas financieras"; +"onboarding_goals_desc" = "Define objetivos, sigue los hitos y ve exactamente hasta dónde has llegado."; + // MARK: - Batch Update (1.2.0) "Batch Update" = "Actualización en bloque"; "Current value" = "Valor actual"; @@ -147,3 +167,11 @@ "New capital added" = "Capital nuevo añadido"; "Contribution (Optional)" = "Aportación (opcional)"; "Track new capital added to separate it from investment growth." = "Registra el capital nuevo para separarlo del crecimiento de la inversión."; + +// MARK: - Monthly Highlights (pre-existing gaps) +"Monthly Highlights" = "Aspectos destacados del mes"; +"Best Performer" = "Mejor rendimiento"; +"Worst Performer" = "Peor rendimiento"; +"Best Contributor" = "Mayor aportador"; +"Update Check-in" = "Actualizar chequeo"; +"Completed %@" = "Completado %@"; diff --git a/PortfolioJournal/Services/IAPService.swift b/PortfolioJournal/Services/IAPService.swift index 32b17d3..c2d4795 100644 --- a/PortfolioJournal/Services/IAPService.swift +++ b/PortfolioJournal/Services/IAPService.swift @@ -262,10 +262,18 @@ extension IAPService { ] /// Condensed benefits shown on the paywall (4 max, outcome-focused) - static let paywallBenefits: [(icon: String, title: String, subtitle: String)] = [ - ("clock.arrow.circlepath", "Your complete history", "Every snapshot, contribution, and gain since day one"), - ("chart.bar.xaxis", "Charts that reveal patterns", "Allocation, drawdown, performance — all in one place"), - ("wand.and.stars", "12-month forecasts", "See where your portfolio is likely heading"), - ("xmark.circle", "No ads, ever", "Clean, focused experience with no distractions") - ] + static var paywallBenefits: [(icon: String, title: String, subtitle: String)] {[ + ("clock.arrow.circlepath", + String(localized: "paywall_benefit_history_title"), + String(localized: "paywall_benefit_history_subtitle")), + ("chart.bar.xaxis", + String(localized: "paywall_benefit_charts_title"), + String(localized: "paywall_benefit_charts_subtitle")), + ("wand.and.stars", + String(localized: "paywall_benefit_forecasts_title"), + String(localized: "paywall_benefit_forecasts_subtitle")), + ("xmark.circle", + String(localized: "paywall_benefit_noads_title"), + String(localized: "paywall_benefit_noads_subtitle")) + ]} } diff --git a/PortfolioJournal/Views/Onboarding/OnboardingView.swift b/PortfolioJournal/Views/Onboarding/OnboardingView.swift index fddf784..b14d023 100644 --- a/PortfolioJournal/Views/Onboarding/OnboardingView.swift +++ b/PortfolioJournal/Views/Onboarding/OnboardingView.swift @@ -15,26 +15,26 @@ struct OnboardingView: View { private let pages: [OnboardingPage] = [ OnboardingPage( icon: "chart.line.uptrend.xyaxis", - title: "Know exactly where you stand", - description: "See your total wealth, real returns, and allocation — always up to date.", + title: String(localized: "onboarding_clarity_title"), + description: String(localized: "onboarding_clarity_desc"), color: .appPrimary ), OnboardingPage( icon: "checkmark.circle.fill", - title: "5 minutes a month is enough", - description: "Log your values once a month. Portfolio Journal handles the math and shows your progress.", + title: String(localized: "onboarding_habit_title"), + description: String(localized: "onboarding_habit_desc"), color: .positiveGreen ), OnboardingPage( icon: "leaf.fill", - title: "Ignore the noise. Track the trend.", - description: "Daily swings don't tell the real story. Your growth over months and years does.", + title: String(localized: "onboarding_calm_title"), + description: String(localized: "onboarding_calm_desc"), color: .appSecondary ), OnboardingPage( icon: "flag.checkered", - title: "Reach your financial goals", - description: "Set targets, track milestones, and see exactly how far you've come.", + title: String(localized: "onboarding_goals_title"), + description: String(localized: "onboarding_goals_desc"), color: .appWarning ) ]