i18n: translate meal/drink pairing, nutrition, comments, DMs, people search, URL import

Full sweep of hardcoded English strings across:
- Meal pairing and drink pairing dialogs (titles, descriptions, role/
  type labels, regenerate/generate buttons, progress labels) — also
  fixed drink type labels that had French text hardcoded regardless
  of locale ("Sans alcool"/"Chaud").
- Nutrition panel — had no useTranslations at all.
- Comments: header, empty/loading state, post/reply/cancel/delete
  buttons, relative timestamps (just now/Xm ago/Xh ago/Xd ago), and
  comment-reactions' toasts + aria-labels.
- Rating stars toasts.
- Direct messages: thread, conversation list, message button, both
  /messages pages.
- People search page and component.
- URL import dialog (title, description, buttons, toasts).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Arnaud
2026-07-09 03:20:49 +02:00
parent e67145493e
commit 08ab9ac71f
16 changed files with 299 additions and 101 deletions
+85 -2
View File
@@ -76,10 +76,43 @@
"pairingSaveFailed": "Failed to save \"{name}\"",
"pairingSuccess": "Recipe generated — review before publishing",
"pairingBulkSuccess": "{count} recipes generated — find them in your library",
"pairingDialogTitle": "Complete the meal",
"pairingDialogDescription": "AI-suggested dishes that pair well with this recipe. Generate any of them as a new recipe.",
"pairingFindingLabel": "Finding perfect pairings…",
"pairingSuggestButton": "Suggest pairings",
"pairingRegenerate": "Regenerate",
"pairingGenerateButton": "Generate",
"pairingGeneratingButton": "Generating {current}/{total}…",
"pairingGeneratingLabel": "Generating recipe {current} of {total}…",
"pairingRoleStarter": "Starter",
"pairingRoleSide": "Side",
"pairingRoleSalad": "Salad",
"pairingRoleBread": "Bread",
"pairingRoleDrink": "Drink",
"pairingRoleDessert": "Dessert",
"pairingRoleSauce": "Sauce",
"drinksDialogTitle": "Drink pairings",
"drinksDialogDescription": "AI-suggested drinks that complement this recipe.",
"drinksSuggestButton": "Suggest drinks",
"drinksExamplesLabel": "e.g.",
"drinksTypeWine": "Wine",
"drinksTypeBeer": "Beer",
"drinksTypeCocktail": "Cocktail",
"drinksTypeSpirit": "Spirit",
"drinksTypeNonAlcoholic": "Non-alcoholic",
"drinksTypeHot": "Hot",
"cookAction": "Cook",
"adaptConstraintPlaceholder": "e.g. Make it vegan, lower the calories, use pantry staples only, gluten-free…",
"photoImportFailed": "Failed to import recipe from photo.",
"importFromPhoto": "Import from Photo",
"urlImportTitle": "Import recipe from URL",
"urlImportDescription": "Paste a recipe URL and AI will extract the ingredients and instructions.",
"urlImportLabel": "Recipe URL",
"urlImportButton": "Import",
"urlImportingButton": "Importing…",
"urlImportFetchFailed": "Failed to import recipe",
"urlImportSaveFailed": "Failed to save imported recipe",
"urlImportSuccess": "Recipe imported! Review before publishing.",
"analyzingPhoto": "Analyzing photo…",
"pairMealTooltip": "Pair meal",
"historyTooltip": "History",
@@ -271,7 +304,42 @@
"reset": "Reset",
"aiScale": "AI Scale",
"scaling": "Scaling…",
"aiScaledNote": "AI-scaled quantities shown below"
"aiScaledNote": "AI-scaled quantities shown below",
"dismissAiScaling": "Dismiss AI scaling"
},
"people": {
"title": "Find People",
"subtitle": "Search for cooks to follow by name or username.",
"searchPlaceholder": "Search people by name or username…",
"searching": "Searching…",
"noneFound": "No one found."
},
"messages": {
"loading": "Loading…",
"noMessagesYet": "No messages yet. Say hi!",
"sendFailed": "Failed to send",
"placeholder": "Type a message…",
"noConversationsYet": "No conversations yet. Visit a profile to say hi.",
"unknownUser": "Unknown",
"noMessagesPreview": "No messages yet",
"selectConversation": "Select a conversation",
"messageButton": "Message",
"startConversationFailed": "Failed to start conversation",
"title": "Messages"
},
"nutritionPanel": {
"estimateButton": "Estimate nutrition",
"reEstimateButton": "Re-estimate",
"estimating": "Estimating…",
"estimatingNutrition": "Estimating nutrition…",
"title": "Nutrition per serving",
"estimateFailed": "Failed to estimate nutrition",
"error": "Something went wrong",
"protein": "Protein",
"carbs": "Carbs",
"fat": "Fat",
"fiber": "Fiber",
"sodium": "Sodium"
},
"explore": {
"title": "Explore",
@@ -642,7 +710,22 @@
"inviteSent": "Invitation sent",
"memberRemoved": "Member removed",
"replyPlaceholder": "Reply…",
"commentPlaceholder": "Share your thoughts…"
"commentPlaceholder": "Share your thoughts…",
"commentsTitle": "Comments",
"noCommentsYet": "No comments yet. Be the first!",
"postButton": "Post",
"postingButton": "Posting…",
"replyButton": "Reply",
"reportButton": "Report",
"ratingFailed": "Failed to rate",
"justNow": "just now",
"minutesAgo": "{mins}m ago",
"hoursAgo": "{hours}h ago",
"daysAgo": "{days}d ago",
"signInToReact": "Sign in to react to comments",
"reactionFailed": "Failed to update reaction",
"addReaction": "Add {type} reaction",
"removeReaction": "Remove {type} reaction"
},
"cookingMode": {
"cooking": "Cooking",