Release 1.4.0 (build 31): retención, quick update, streak, what's new

- 1A: Notificación mensual de resumen de portfolio (día 5 de cada mes)
- 1B: Badge de racha mensual en Dashboard (streak counter)
- 1C: Empty states mejorados en Goals y Journal con CTAs claros
- 2A: Quick Update sheet — actualiza todas las fuentes desde una pantalla
- 2B: Notificación batch update redirige al Quick Update sheet
- 2C: Widget deep link portfoliojournal://quickupdate abre Quick Update
- 3A: App Store version check banner en Settings
- 3C: What's New sheet en primer launch de versión nueva
- Localización completa en 7 idiomas para todas las nuevas strings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
alexandrev-tibco
2026-05-21 23:09:36 +02:00
parent 773da6800b
commit b48a47ce10
41 changed files with 2659 additions and 483 deletions
@@ -315,3 +315,80 @@
// MARK: - AddSourceView (1.3.0)
"add_source_name_placeholder" = "e.g. MSCI World ETF, ING Savings, Apartment...";
"add_source_name_footer" = "A source is any investment you want to track: stocks, ETFs, savings accounts, real estate, crypto, and more.";
// MARK: - Goals Archive (1.3.2)
"goals_filter_active" = "Active";
"goals_filter_archived" = "Archived";
"goals_filter_all" = "All";
"goal_archive" = "Archive";
"goal_unarchive" = "Unarchive";
"goals_empty_archived" = "No archived goals.";
"goals_all_active_achieved" = "All active goals are achieved.";
// MARK: - Category Management (1.3.2)
"category_name_placeholder" = "e.g. Emergency Fund";
"category_has_sources_warning" = "Cannot delete a category that has sources. Remove or reassign all sources first.";
"categories_empty" = "No categories yet.";
// MARK: - CSV Column Mapping (1.3.2)
"csv_mapping_subtitle" = "Match your CSV columns to Portfolio Journal fields";
"csv_field_source" = "Source Name (required)";
"csv_field_value" = "Value (required)";
"csv_field_date" = "Date";
"csv_field_category" = "Category";
"csv_field_contribution" = "Contribution";
"csv_field_notes" = "Notes";
"csv_no_column" = "— Not mapped —";
"csv_enter_value" = "Enter value";
"csv_use_today" = "Use today's date";
"csv_no_date_hint" = "All rows will be imported as a snapshot for today.";
"csv_preview_section" = "CSV Preview";
"csv_required_section" = "Required Fields";
"csv_optional_section" = "Optional Fields";
// MARK: - 1.3.2 Features
"goal_achieved_notification_title" = "Goal achieved! 🎉";
"goal_achieved_notification_body" = "You reached your goal: %@";
"snapshot_duplicate_title" = "Snapshot Already Exists";
"snapshot_duplicate_message" = "You already have a snapshot for this month. Do you want to add another one?";
"snapshot_duplicate_replace" = "Replace Existing";
"snapshot_duplicate_add" = "Add Anyway";
"contributions_vs_returns_title" = "Invested vs. Returns";
"contributions_vs_returns_invested" = "Invested";
"contributions_vs_returns_returns" = "Market Returns";
"chart_yoy_title" = "Year over Year";
"chart_yoy_empty" = "Add more snapshots across different years to see the comparison.";
// MARK: - Goal Delete Confirmation (1.3.2)
"goal_delete_title" = "Delete Goal";
"goal_delete_message" = "This goal will be permanently deleted. This action cannot be undone.";
"goal_delete_confirm" = "Delete";
// MARK: - 1.4.0 Features
"monthly_summary_notification_title" = "Your Monthly Portfolio Summary";
"monthly_summary_notification_body" = "Check how your investments performed this month.";
"streak_badge" = "%d-month streak";
"goals_empty_add_cta" = "Add My First Goal";
"journal_empty_title" = "No check-ins yet";
"journal_empty_body" = "Snapshot updates automatically create monthly entries. Add your first source to get started.";
"quick_update_title" = "Quick Update";
"quick_update_section_header" = "Enter current values";
"quick_update_section_footer" = "Only sources with a value entered will be updated.";
"quick_update_placeholder" = "New value";
"quick_update_save" = "Save All";
"quick_update_no_sources" = "No sources";
"quick_update_no_sources_body" = "Add investment sources first to use Quick Update.";
"update_available_title" = "Update Available";
"update_available_body" = "Version %@ is ready on the App Store.";
"whats_new_title" = "What's New in 1.4";
"whats_new_subtitle" = "Improvements to help you stay on track.";
"whats_new_quick_update_title" = "Quick Portfolio Update";
"whats_new_quick_update_body" = "Update all your sources from a single screen with one tap.";
"whats_new_streak_title" = "Update Streak";
"whats_new_streak_body" = "Track how many months in a row you've kept your portfolio up to date.";
"whats_new_goals_title" = "Smarter Goals & Journal";
"whats_new_goals_body" = "Improved empty states help you get started faster.";
"whats_new_continue" = "Let's Go";