1.0.4: Smarter auto-assign, quick dish entry, calendar fix, frictionless onboarding
- AutocompleteEngine: no-repeat rule now applies to all dishes (not just tagless ones); fallback still allows repeats when no alternative exists - CalendarService: update existing events instead of delete+create to prevent duplicates; fix weekStartDate using plan date instead of currentWeekStart - DishFormView: form stays open after saving in create mode for quick multi-dish entry; Done button to close; saved feedback banner - OnboardingViewModel/FirstDishesStepView: dishes are now optional during onboarding; Finish button always enabled - AnalyticsService: new events — onboarding_step_viewed(step) and auto_assign_used(filled, unfilled) - Localization: dish_done and first_dishes_optional_hint added in 6 languages; release notes updated in all 6 languages - Version bump: 1.0.3 → 1.0.4 (build 19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,9 +15,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<string>1.0.4</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<string>21</string>
|
||||
<key>GADApplicationIdentifier</key>
|
||||
<string>ca-app-pub-1549720748100858~9985112590</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Schritt 4: Füge deine Lieblingsgerichte hinzu";
|
||||
"first_dishes_subtitle" = "Füge mindestens 2 Gerichte hinzu, um zu starten";
|
||||
"first_dishes_subtitle" = "Füge einige Gerichte hinzu, um schneller zu starten.";
|
||||
"first_dishes_optional_hint" = "Optional — du kannst jederzeit weitere Gerichte in der App hinzufügen.";
|
||||
"first_dishes_name_placeholder" = "Gerichtsname";
|
||||
"first_dishes_add_tag" = "Tag hinzufügen";
|
||||
"first_dishes_add_dish" = "Gericht hinzufügen";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "Dieses Gericht löschen?";
|
||||
"dish_delete_message" = "Diese Aktion kann nicht rückgängig gemacht werden";
|
||||
"dish_cancel" = "Abbrechen";
|
||||
"dish_done" = "Fertig";
|
||||
"dish_delete_blocked_title" = "Löschen nicht möglich";
|
||||
"dish_delete_blocked_message" = "Du kannst kein Gericht löschen, das der aktuellen Woche zugewiesen ist.";
|
||||
"dish_delete_blocked_ok" = "OK";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 Stunden vorher";
|
||||
|
||||
"first_dishes_limit_reached" = "Du hast 10 Gerichte erreicht. Tippe auf Fertig, wenn du bereit bist.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Als Story-Hintergrund teilen";
|
||||
"share_copy_image" = "Bild kopieren";
|
||||
"share_copy_subtitle" = "In WhatsApp, Telegram einfügen…";
|
||||
"share_more_options" = "Mehr Optionen";
|
||||
"share_more_subtitle" = "In jeder App teilen";
|
||||
"share_export_sheet_title" = "Teilen";
|
||||
"share_copied" = "Bild kopiert!";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "So könnte deine Woche aussehen ✨";
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Step 4: Add your go-to dishes";
|
||||
"first_dishes_subtitle" = "Add at least 2 dishes to get started";
|
||||
"first_dishes_subtitle" = "Add a few dishes to get started faster.";
|
||||
"first_dishes_optional_hint" = "Optional — you can add more dishes anytime from the app.";
|
||||
"first_dishes_name_placeholder" = "Dish name";
|
||||
"first_dishes_add_tag" = "Add tag";
|
||||
"first_dishes_add_dish" = "Add dish";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "Delete this dish?";
|
||||
"dish_delete_message" = "This action cannot be undone";
|
||||
"dish_cancel" = "Cancel";
|
||||
"dish_done" = "Done";
|
||||
"dish_delete_blocked_title" = "Cannot delete";
|
||||
"dish_delete_blocked_message" = "You cannot delete a dish assigned in the current week.";
|
||||
"dish_delete_blocked_ok" = "OK";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 hours before";
|
||||
|
||||
"first_dishes_limit_reached" = "You reached 10 dishes. Tap Finish when you are ready.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Share as a Story background";
|
||||
"share_copy_image" = "Copy Image";
|
||||
"share_copy_subtitle" = "Paste in WhatsApp, Telegram…";
|
||||
"share_more_options" = "More options";
|
||||
"share_more_subtitle" = "Share to any app";
|
||||
"share_export_sheet_title" = "Share";
|
||||
"share_copied" = "Image copied!";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "Your week could look like this ✨";
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Paso 4: Añade tus platos habituales";
|
||||
"first_dishes_subtitle" = "Añade al menos 2 platos para empezar";
|
||||
"first_dishes_subtitle" = "Añade algunos platos para empezar más rápido.";
|
||||
"first_dishes_optional_hint" = "Opcional — puedes añadir más platos desde la app en cualquier momento.";
|
||||
"first_dishes_name_placeholder" = "Nombre del plato";
|
||||
"first_dishes_add_tag" = "Añadir etiqueta";
|
||||
"first_dishes_add_dish" = "Añadir plato";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "¿Eliminar este plato?";
|
||||
"dish_delete_message" = "Esta acción no se puede deshacer";
|
||||
"dish_cancel" = "Cancelar";
|
||||
"dish_done" = "Hecho";
|
||||
"dish_delete_blocked_title" = "No se puede eliminar";
|
||||
"dish_delete_blocked_message" = "No puedes eliminar un plato asignado en la semana actual.";
|
||||
"dish_delete_blocked_ok" = "Entendido";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 horas antes";
|
||||
|
||||
"first_dishes_limit_reached" = "Has llegado a 10 platos. Pulsa Finalizar cuando quieras.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Compartir como fondo de historia";
|
||||
"share_copy_image" = "Copiar imagen";
|
||||
"share_copy_subtitle" = "Pega en WhatsApp, Telegram…";
|
||||
"share_more_options" = "Más opciones";
|
||||
"share_more_subtitle" = "Compartir con cualquier app";
|
||||
"share_export_sheet_title" = "Compartir";
|
||||
"share_copied" = "¡Imagen copiada!";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "Tu semana puede quedar así ✨";
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Étape 4 : Ajoutez vos plats favoris";
|
||||
"first_dishes_subtitle" = "Ajoutez au moins 2 plats pour commencer";
|
||||
"first_dishes_subtitle" = "Ajoutez quelques plats pour démarrer plus vite.";
|
||||
"first_dishes_optional_hint" = "Optionnel — vous pouvez en ajouter d'autres depuis l'app.";
|
||||
"first_dishes_name_placeholder" = "Nom du plat";
|
||||
"first_dishes_add_tag" = "Ajouter un tag";
|
||||
"first_dishes_add_dish" = "Ajouter un plat";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "Supprimer ce plat ?";
|
||||
"dish_delete_message" = "Cette action est irréversible";
|
||||
"dish_cancel" = "Annuler";
|
||||
"dish_done" = "Terminé";
|
||||
"dish_delete_blocked_title" = "Suppression impossible";
|
||||
"dish_delete_blocked_message" = "Vous ne pouvez pas supprimer un plat assigné à la semaine en cours.";
|
||||
"dish_delete_blocked_ok" = "OK";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 heures avant";
|
||||
|
||||
"first_dishes_limit_reached" = "Vous avez atteint 10 plats. Touchez Terminer quand vous êtes prêt.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Partager comme fond de Story";
|
||||
"share_copy_image" = "Copier l'image";
|
||||
"share_copy_subtitle" = "Coller dans WhatsApp, Telegram…";
|
||||
"share_more_options" = "Plus d'options";
|
||||
"share_more_subtitle" = "Partager dans n'importe quelle app";
|
||||
"share_export_sheet_title" = "Partager";
|
||||
"share_copied" = "Image copiée !";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "Votre semaine pourrait ressembler à ça ✨";
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Passo 4: Aggiungi i tuoi piatti preferiti";
|
||||
"first_dishes_subtitle" = "Aggiungi almeno 2 piatti per iniziare";
|
||||
"first_dishes_subtitle" = "Aggiungi alcuni piatti per iniziare più velocemente.";
|
||||
"first_dishes_optional_hint" = "Opzionale — puoi aggiungerne altri dall'app in qualsiasi momento.";
|
||||
"first_dishes_name_placeholder" = "Nome del piatto";
|
||||
"first_dishes_add_tag" = "Aggiungi tag";
|
||||
"first_dishes_add_dish" = "Aggiungi piatto";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "Eliminare questo piatto?";
|
||||
"dish_delete_message" = "Questa azione non può essere annullata";
|
||||
"dish_cancel" = "Annulla";
|
||||
"dish_done" = "Fatto";
|
||||
"dish_delete_blocked_title" = "Impossibile eliminare";
|
||||
"dish_delete_blocked_message" = "Non puoi eliminare un piatto assegnato alla settimana corrente.";
|
||||
"dish_delete_blocked_ok" = "OK";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 ore prima";
|
||||
|
||||
"first_dishes_limit_reached" = "Hai raggiunto 10 piatti. Tocca Fine quando sei pronto.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Condividi come sfondo di una Story";
|
||||
"share_copy_image" = "Copia immagine";
|
||||
"share_copy_subtitle" = "Incolla in WhatsApp, Telegram…";
|
||||
"share_more_options" = "Altre opzioni";
|
||||
"share_more_subtitle" = "Condividi con qualsiasi app";
|
||||
"share_export_sheet_title" = "Condividi";
|
||||
"share_copied" = "Immagine copiata!";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "La tua settimana potrebbe essere così ✨";
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
|
||||
/* First Dishes */
|
||||
"first_dishes_title" = "Etapa 4: Adicione seus pratos favoritos";
|
||||
"first_dishes_subtitle" = "Adicione pelo menos 2 pratos para começar";
|
||||
"first_dishes_subtitle" = "Adicione alguns pratos para começar mais rápido.";
|
||||
"first_dishes_optional_hint" = "Opcional — você pode adicionar mais pratos pelo app a qualquer momento.";
|
||||
"first_dishes_name_placeholder" = "Nome do prato";
|
||||
"first_dishes_add_tag" = "Adicionar tag";
|
||||
"first_dishes_add_dish" = "Adicionar prato";
|
||||
@@ -104,6 +105,7 @@
|
||||
"dish_delete_title" = "Excluir este prato?";
|
||||
"dish_delete_message" = "Essa ação não pode ser desfeita";
|
||||
"dish_cancel" = "Cancelar";
|
||||
"dish_done" = "Concluído";
|
||||
"dish_delete_blocked_title" = "Não é possível excluir";
|
||||
"dish_delete_blocked_message" = "Você não pode excluir um prato atribuído à semana atual.";
|
||||
"dish_delete_blocked_ok" = "OK";
|
||||
@@ -284,3 +286,15 @@
|
||||
"reminder_120" = "2 horas antes";
|
||||
|
||||
"first_dishes_limit_reached" = "Você chegou a 10 pratos. Toque em Concluir quando estiver pronto.";
|
||||
|
||||
// Social share
|
||||
"share_instagram_subtitle" = "Compartilhar como fundo de Story";
|
||||
"share_copy_image" = "Copiar imagem";
|
||||
"share_copy_subtitle" = "Cole no WhatsApp, Telegram…";
|
||||
"share_more_options" = "Mais opções";
|
||||
"share_more_subtitle" = "Compartilhar com qualquer app";
|
||||
"share_export_sheet_title" = "Compartilhar";
|
||||
"share_copied" = "Imagem copiada!";
|
||||
|
||||
// Onboarding preview
|
||||
"onboarding_welcome_preview_label" = "Sua semana pode ficar assim ✨";
|
||||
|
||||
Reference in New Issue
Block a user