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
@@ -242,3 +242,97 @@
// MARK: - AddSourceView (1.3.0)
"add_source_name_placeholder" = "p.ej. ETF MSCI World, Cuenta ING, Piso...";
"add_source_name_footer" = "Una fuente es cualquier inversión que quieras seguir: acciones, ETFs, cuentas de ahorro, inmuebles, cripto y más.";
// MARK: - Goals Archive (1.3.2)
"goals_filter_active" = "Activos";
"goals_filter_archived" = "Archivados";
"goals_filter_all" = "Todos";
"goal_archive" = "Archivar";
"goal_unarchive" = "Restaurar";
"goals_empty_archived" = "Sin objetivos archivados.";
"goals_all_active_achieved" = "Todos los objetivos activos están logrados.";
// MARK: - Category Management (1.3.2)
"category_name_placeholder" = "p.ej. Fondo de emergencia";
"category_has_sources_warning" = "No se puede eliminar una categoría que tiene fuentes. Elimina o reasigna todas las fuentes primero.";
"categories_empty" = "Sin categorías aún.";
// MARK: - CSV Column Mapping (1.3.2)
"csv_mapping_subtitle" = "Relaciona tus columnas CSV con los campos de Portfolio Journal";
"csv_field_source" = "Nombre de fuente (obligatorio)";
"csv_field_value" = "Valor (obligatorio)";
"csv_field_date" = "Fecha";
"csv_field_category" = "Categoría";
"csv_field_contribution" = "Aportación";
"csv_field_notes" = "Notas";
"csv_no_column" = "— Sin mapear —";
"csv_enter_value" = "Valor fijo";
"csv_use_today" = "Fecha de hoy";
"csv_no_date_hint" = "Todas las filas se importarán como un snapshot de hoy.";
"csv_preview_section" = "Vista previa CSV";
"csv_required_section" = "Campos obligatorios";
"csv_optional_section" = "Campos opcionales";
// MARK: - Category Management SwiftUI literals (1.3.2)
"Categories" = "Categorías";
"Add Category" = "Añadir categoría";
"Edit Category" = "Editar categoría";
"Category Name" = "Nombre de categoría";
"Color" = "Color";
"Icon" = "Icono";
"Map Columns" = "Mapear columnas";
"Has Header Row" = "Tiene fila de encabezado";
"Required" = "Obligatorios";
"Optional" = "Opcionales";
"Preview" = "Vista previa";
"Any CSV" = "Cualquier CSV";
// MARK: - 1.3.2 Features
"goal_achieved_notification_title" = "¡Objetivo alcanzado! 🎉";
"goal_achieved_notification_body" = "Has alcanzado tu objetivo: %@";
"snapshot_duplicate_title" = "Ya existe un snapshot";
"snapshot_duplicate_message" = "Ya tienes un snapshot para este mes. ¿Quieres añadir otro?";
"snapshot_duplicate_replace" = "Reemplazar existente";
"snapshot_duplicate_add" = "Añadir de todos modos";
"contributions_vs_returns_title" = "Invertido vs. Rentabilidad";
"contributions_vs_returns_invested" = "Invertido";
"contributions_vs_returns_returns" = "Rentabilidad de mercado";
"chart_yoy_title" = "Año a año";
"chart_yoy_empty" = "Añade más snapshots en diferentes años para ver la comparación.";
"Year vs Year" = "Año a año";
// MARK: - Goal Delete Confirmation (1.3.2)
"goal_delete_title" = "Eliminar objetivo";
"goal_delete_message" = "Este objetivo se eliminará permanentemente. Esta acción no se puede deshacer.";
"goal_delete_confirm" = "Eliminar";
// MARK: - 1.4.0 Features
"monthly_summary_notification_title" = "Tu resumen mensual del portfolio";
"monthly_summary_notification_body" = "Comprueba cómo han rendido tus inversiones este mes.";
"streak_badge" = "Racha de %d meses";
"goals_empty_add_cta" = "Añadir mi primer objetivo";
"journal_empty_title" = "Sin registros aún";
"journal_empty_body" = "Las actualizaciones de snapshots crean entradas mensuales automáticamente. Añade tu primera fuente para empezar.";
"quick_update_title" = "Actualización rápida";
"quick_update_section_header" = "Introduce los valores actuales";
"quick_update_section_footer" = "Solo se actualizarán las fuentes con un valor introducido.";
"quick_update_placeholder" = "Nuevo valor";
"quick_update_save" = "Guardar todo";
"quick_update_no_sources" = "Sin fuentes";
"quick_update_no_sources_body" = "Añade fuentes de inversión primero para usar la actualización rápida.";
"update_available_title" = "Actualización disponible";
"update_available_body" = "La versión %@ está disponible en el App Store.";
"whats_new_title" = "Novedades en 1.4";
"whats_new_subtitle" = "Mejoras para ayudarte a mantener el rumbo.";
"whats_new_quick_update_title" = "Actualización rápida del portfolio";
"whats_new_quick_update_body" = "Actualiza todas tus fuentes desde una sola pantalla con un toque.";
"whats_new_streak_title" = "Racha de actualizaciones";
"whats_new_streak_body" = "Sigue cuántos meses consecutivos has mantenido tu portfolio al día.";
"whats_new_goals_title" = "Objetivos y diario más inteligentes";
"whats_new_goals_body" = "Los estados vacíos mejorados te ayudan a empezar más rápido.";
"whats_new_continue" = "¡Vamos!";
"goal_delete_confirm" = "Eliminar";