1.4.1 (build 42): contribución por snapshot, fixes Period vs Period y navegación iPad

- 151: contribución editable por snapshot en cualquier modo (quitado gate detailed)
  con diálogo de propagación al editar: solo este / adelante / atrás / todos
  (SnapshotRepository.propagateContribution, SnapshotFormViewModel.contributionChanged)
- 148: Period vs Period mostraba mal el último mes del period B — la agrupación usaba
  chartMonth(for:) que aplicaba el grace-period del check-in a snapshots históricos;
  ahora agrupa por mes calendario crudo
- 152: iPad Sources no saltaba entre fuentes — añadido .id() al SourceDetailView para
  recrear el StateObject al cambiar de selección
- 146/147: Year vs Year con forecast del año en curso (asterisco de estimado) y KPIs
  arriba / detalle debajo
- 145: card de contribución mensual en SourceDetailView
- Nuevas claves snapshot_contribution_propagate_* en los 7 idiomas

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015qUZrBusG82T37R7PeokqJ
This commit is contained in:
alexandrev-tibco
2026-06-30 16:51:03 +02:00
parent 54dfd8a8e3
commit 7a18dd8360
48 changed files with 2854 additions and 608 deletions
@@ -311,6 +311,7 @@
"category_name_placeholder" = "例:緊急資金";
"chart_yoy_empty" = "比較を表示するには、異なる年のスナップショットを追加してください。";
"chart_yoy_title" = "年次比較";
"chart_yoy_estimated_note" = "* 推定(年末予測)";
"checking_icloud" = "iCloudを確認中...";
"contributions_vs_returns_invested" = "投資額";
"contributions_vs_returns_returns" = "市場リターン";
@@ -354,6 +355,12 @@
"reengagement_body" = "数分で投資の状況を把握できます。";
"reengagement_title" = "ポートフォリオが待っています";
"snapshot_duplicate_add" = "とにかく追加";
"snapshot_contribution_propagate_title" = "拠出を適用";
"snapshot_contribution_propagate_message" = "%@ を他のスナップショットにも拠出として適用しますか?";
"snapshot_contribution_propagate_forward" = "以降に適用";
"snapshot_contribution_propagate_backward" = "以前に適用";
"snapshot_contribution_propagate_all" = "すべてに適用";
"snapshot_contribution_propagate_this" = "このスナップショットのみ";
"snapshot_duplicate_message" = "今月のスナップショットはすでにあります。別のスナップショットを追加しますか?";
"snapshot_duplicate_replace" = "既存を置き換え";
"snapshot_duplicate_title" = "スナップショットがすでに存在します";
@@ -384,3 +391,26 @@
"whats_new_goals_title" = "スマートな目標とジャーナル";
"whats_new_goals_body" = "改善された空の状態でより素早く始められます。";
"whats_new_continue" = "始めよう";
"source_monthly_contribution_title" = "月次積立額";
"source_monthly_contribution_placeholder" = "例: 500";
"source_monthly_contribution_not_set" = "未設定";
"source_monthly_contribution_hint" = "クイック更新で自動入力されます";
"quick_update_contribution_label" = "積立";
"quick_update_contribution_placeholder" = "金額";
"source_monthly_contribution_apply_title" = "積立の適用";
"source_monthly_contribution_apply_message" = "積立なしの過去のスナップショットすべてに%@を適用しますか?";
"source_monthly_contribution_apply_retroactive" = "過去のスナップショットにも適用";
"source_monthly_contribution_apply_forward" = "今後のみ適用";
// MARK: - Portfolio Insights
"insights_section_title" = "インサイト";
"insight_milestone_title" = "目標まであと少し";
"insight_milestone_value" = "%2$@まであと%1$@";
"insight_ytd_title" = "年初来";
"insight_market_gains_title" = "市場利益";
"insight_market_gains_value" = "市場から+%@";
"insight_streak_title" = "追跡連続記録";
"insight_streak_value" = "%dヶ月連続";
"insight_forecast_title" = "目標に向けて順調";
"notification_milestone_title" = "ポートフォリオ達成!🎉";
"notification_milestone_body" = "ポートフォリオが%@を突破しました。おめでとうございます!";