Redesign search tab, add category cards, recent recipes, and complete German translations

Overhaul SearchTabView with search history, empty/no-results states, and dynamic
navigation title. Extract CategoryCardView and RecentRecipesSection into standalone
views. Update RecipeTabView, RecipeListView, RecipeCardView, and MainView for the
modernized UI. Add all 12 missing German translations in Localizable.xcstrings.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 01:47:16 +01:00
parent 7c824b492e
commit c8ddb098d1
11 changed files with 792 additions and 121 deletions

View File

@@ -284,6 +284,16 @@
}
}
},
"%lld recipes" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "%lld Rezepte"
}
}
}
},
"%lld Serving(s)" : {
"localizations" : {
"de" : {
@@ -401,7 +411,7 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : ""
"value" : "Ein einfach zu verwendender PDF-Ersteller für Swift. Wird zum Erzeugen von Rezept-PDF-Dokumenten verwendet."
}
},
"es" : {
@@ -467,7 +477,7 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : ""
"value" : "Aktion verzögert"
}
},
"es" : {
@@ -578,7 +588,7 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : ""
"value" : "Eine HTML-Parsing- und Web-Scraping-Bibliothek für Swift. Wird zum Importieren von schema.org-Rezepten von Webseiten verwendet."
}
},
"es" : {
@@ -753,6 +763,16 @@
}
}
},
"Categories" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Kategorien"
}
}
}
},
"Category" : {
"localizations" : {
"de" : {
@@ -843,6 +863,16 @@
}
}
},
"Clear" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Löschen"
}
}
}
},
"Comma (e.g. 1,42)" : {
"localizations" : {
"de" : {
@@ -977,6 +1007,7 @@
}
},
"Cookbooks" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -1329,6 +1360,17 @@
}
}
},
"Downloaded" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Heruntergeladen"
}
}
}
},
"Downloads" : {
"localizations" : {
"de" : {
@@ -1440,6 +1482,18 @@
}
}
},
"Enter a recipe name or keyword to get started." : {
"comment" : "A description under the magnifying glass icon in the \"Search for recipes\" view, encouraging the user to start searching.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Gib einen Rezeptnamen oder ein Stichwort ein, um loszulegen."
}
}
}
},
"Error" : {
"localizations" : {
"de" : {
@@ -2459,6 +2513,16 @@
}
}
},
"No cookbooks found" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Keine Kategorien gefunden"
}
}
}
},
"No keywords." : {
"localizations" : {
"de" : {
@@ -2503,6 +2567,28 @@
}
}
},
"No recipes in this cookbook" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Keine Rezepte in dieser Kategorie"
}
}
}
},
"No results found" : {
"comment" : "A message indicating that no recipes were found for the current search query.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Keine Ergebnisse gefunden"
}
}
}
},
"None" : {
"localizations" : {
"de" : {
@@ -2635,6 +2721,17 @@
}
}
},
"On server" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Auf dem Server"
}
}
}
},
"Other" : {
"localizations" : {
"de" : {
@@ -2881,6 +2978,36 @@
}
}
},
"Pull to refresh or check your server connection." : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Zum Aktualisieren nach unten ziehen oder Serververbindung prüfen."
}
}
}
},
"Recent searches" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Letzte Suchen"
}
}
}
},
"Recently Viewed" : {
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Zuletzt angesehen"
}
}
}
},
"Recipe" : {
"localizations" : {
"de" : {
@@ -2969,6 +3096,18 @@
}
}
},
"Recipes will appear here once they are added to this category." : {
"comment" : "A description of what will happen when a user adds a recipe to a category.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Rezepte werden hier angezeigt, sobald sie dieser Kategorie hinzugefügt werden."
}
}
}
},
"Refresh" : {
"localizations" : {
"de" : {
@@ -3080,6 +3219,18 @@
}
}
},
"Search for recipes" : {
"comment" : "A prompt displayed when the search text is empty, encouraging the user to enter a search term.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Rezepte suchen"
}
}
}
},
"Search recipe" : {
"localizations" : {
"de" : {
@@ -3124,6 +3275,18 @@
}
}
},
"Search Results" : {
"comment" : "The title of the view that lists search results for recipes.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Suchergebnisse"
}
}
}
},
"Select a default cookbook" : {
"localizations" : {
"de" : {
@@ -3574,7 +3737,7 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : ""
"value" : "SwiftSoup"
}
},
"es" : {
@@ -3681,6 +3844,7 @@
}
},
"There are no recipes in this cookbook!" : {
"extractionState" : "stale",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -3931,7 +4095,7 @@
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : ""
"value" : "TPPDF"
}
},
"es" : {
@@ -3971,6 +4135,18 @@
}
}
},
"Try a different search term." : {
"comment" : "A message suggesting a different search term if no results are found.",
"isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
"value" : "Versuche einen anderen Suchbegriff."
}
}
}
},
"Unable to complete action." : {
"localizations" : {
"de" : {
@@ -4305,5 +4481,5 @@
}
}
},
"version" : "1.0"
"version" : "1.1"
}