442 lines
16 KiB
JSON
442 lines
16 KiB
JSON
{
|
||
"nav": {
|
||
"recipes": "Recipes",
|
||
"explore": "Explore",
|
||
"search": "Search",
|
||
"feed": "Feed",
|
||
"collections": "Collections",
|
||
"mealPlan": "Meal Plan",
|
||
"pantry": "Pantry",
|
||
"shopping": "Shopping",
|
||
"settings": "Settings",
|
||
"admin": "Admin",
|
||
"signOut": "Sign out",
|
||
"apiKeys": "API keys",
|
||
"webhooks": "Webhooks",
|
||
"language": "Language"
|
||
},
|
||
"recipe": {
|
||
"ingredients": "Ingredients",
|
||
"instructions": "Instructions",
|
||
"photos": "Photos",
|
||
"servings": "{count} servings",
|
||
"prep": "{mins}m prep",
|
||
"cook": "{mins}m cook",
|
||
"total": "{mins}m total",
|
||
"edit": "Edit",
|
||
"variations": "Variations",
|
||
"save": "Save",
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"noIngredientsSteps": "No ingredients or steps yet.",
|
||
"generateContent": "Generate with AI",
|
||
"editManually": "Edit manually",
|
||
"deleted": "Recipe deleted",
|
||
"deleteFailed": "Delete failed",
|
||
"imported": "Recipe imported! Review before publishing.",
|
||
"adapted": "Adapted recipe saved as draft",
|
||
"adaptFailed": "Failed to adapt recipe",
|
||
"adaptConstraintRequired": "Select at least one ingredient to exclude or add a constraint",
|
||
"variationsDirectionsPlaceholder": "e.g. make it vegan, use only pantry staples, reduce sugar…",
|
||
"historyRestoreFailed": "Failed to restore version",
|
||
"pairingMealFailed": "Failed to suggest pairings",
|
||
"pairingDrinkFailed": "Failed to suggest drinks",
|
||
"pairingGenerateFailed": "Failed to generate \"{name}\"",
|
||
"pairingSaveFailed": "Failed to save \"{name}\"",
|
||
"pairingSuccess": "Recipe generated — review before publishing",
|
||
"shoppingListCreateFailed": "Failed to create list",
|
||
"shoppingListAddFailed": "Failed to add ingredients",
|
||
"bulkDeleted": "{count, plural, one {1 recipe deleted} other {{count} recipes deleted}}",
|
||
"bulkVisibility": "{count, plural, one {1 recipe set to {visibility}} other {{count} recipes set to {visibility}}}",
|
||
"bulkDeleteFailed": "Delete failed",
|
||
"bulkUpdateFailed": "Update failed",
|
||
"visibility": {
|
||
"private": "Private",
|
||
"unlisted": "Unlisted",
|
||
"public": "Public"
|
||
},
|
||
"difficulty": {
|
||
"easy": "Easy",
|
||
"medium": "Medium",
|
||
"hard": "Hard"
|
||
},
|
||
"dietary": {
|
||
"vegan": "Vegan",
|
||
"vegetarian": "Vegetarian",
|
||
"glutenFree": "Gluten-free",
|
||
"dairyFree": "Dairy-free",
|
||
"nutFree": "Nut-free",
|
||
"halal": "Halal",
|
||
"kosher": "Kosher"
|
||
}
|
||
},
|
||
"ai": {
|
||
"generate": {
|
||
"title": "Generate recipe with AI",
|
||
"description": "Describe what you want to cook and AI will create a complete recipe.",
|
||
"descriptionFull": "Describe a dish in words or snap a photo — AI builds the full recipe.",
|
||
"tabDescribe": "Describe",
|
||
"tabPhoto": "From photo",
|
||
"surpriseMe": "Surprise me",
|
||
"prompt": "What do you want to cook?",
|
||
"placeholder": "e.g. A creamy mushroom risotto with parmesan, serves 4, easy difficulty",
|
||
"language": "Recipe language",
|
||
"difficulty": "Difficulty",
|
||
"anyDifficulty": "Any",
|
||
"button": "Generate",
|
||
"generating": "Generating…",
|
||
"success": "Recipe generated! Review and edit before publishing.",
|
||
"error": "Failed to generate recipe",
|
||
"saveError": "Failed to save generated recipe",
|
||
"uploadClick": "Click to upload",
|
||
"uploadDrag": "or drag a food photo",
|
||
"uploadFormats": "JPEG, PNG or WebP · AI will reverse-engineer the recipe",
|
||
"analyzing": "Analyzing…",
|
||
"analyzePhoto": "Analyzing dish photo…",
|
||
"recognizeDish": "Recognize dish",
|
||
"photoSuccess": "Recipe recognized! Review and edit before publishing.",
|
||
"photoError": "Failed to analyze photo",
|
||
"contentGenerated": "Ingredients and steps generated!",
|
||
"contentGenerateFailed": "Generation failed",
|
||
"contentSaveFailed": "Failed to save generated content",
|
||
"generatingContent": "Generating recipe content…"
|
||
},
|
||
"variations": {
|
||
"title": "AI Recipe Variations",
|
||
"description": "Generate creative variations of this recipe — dietary adaptations, flavor twists, technique changes.",
|
||
"generate": "Generate 3 variations",
|
||
"generating": "Generating variations…",
|
||
"regenerate": "Regenerate",
|
||
"apply": "Apply",
|
||
"applying": "Applying…",
|
||
"ingredientChanges": "Ingredient changes",
|
||
"stepChanges": "Step changes",
|
||
"success": "Variation created — review and edit before publishing.",
|
||
"error": "Failed to generate variations",
|
||
"saveError": "Failed to save variation",
|
||
"wait": "This may take 20–30 seconds"
|
||
},
|
||
"translate": {
|
||
"title": "Translate Recipe",
|
||
"description": "Translate this recipe's title, description, ingredients, and steps into another language.",
|
||
"targetLanguage": "Target language",
|
||
"button": "Translate",
|
||
"translating": "Translating…",
|
||
"success": "Translation saved as new draft recipe.",
|
||
"error": "Failed to translate recipe",
|
||
"saveError": "Failed to save translated recipe",
|
||
"wait": "This may take 20–30 seconds"
|
||
}
|
||
},
|
||
"settings": {
|
||
"title": "Settings",
|
||
"profile": "Profile",
|
||
"language": "Language",
|
||
"units": "Units",
|
||
"metric": "Metric",
|
||
"imperial": "Imperial"
|
||
},
|
||
"common": {
|
||
"loading": "Loading…",
|
||
"error": "Something went wrong",
|
||
"save": "Save",
|
||
"saved": "Saved",
|
||
"saveFailed": "Failed to save",
|
||
"deleteFailed": "Delete failed",
|
||
"updateFailed": "Update failed",
|
||
"copyFailed": "Failed to copy to clipboard",
|
||
"deleted": "Deleted",
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"confirm": "Confirm",
|
||
"back": "Back",
|
||
"difficulty": "Difficulty",
|
||
"anyDifficulty": "Any",
|
||
"editManually": "Edit manually",
|
||
"surpriseMe": "Surprise me",
|
||
"generatingContent": "Generating recipe content…"
|
||
},
|
||
"auth": {
|
||
"signIn": "Sign in",
|
||
"signInTitle": "Sign in to your recipe library",
|
||
"signInLoading": "Signing in…",
|
||
"signInFailed": "Sign in failed",
|
||
"signUp": "Sign up",
|
||
"signUpTitle": "Create account",
|
||
"signUpSubtitle": "Start building your recipe library",
|
||
"signUpLoading": "Creating account…",
|
||
"signUpFailed": "Sign up failed",
|
||
"signUpSuccess": "Account created — check your email to verify",
|
||
"continueWithGoogle": "Continue with Google",
|
||
"email": "Email",
|
||
"emailPlaceholder": "you@example.com",
|
||
"password": "Password",
|
||
"name": "Name",
|
||
"namePlaceholder": "Your name",
|
||
"forgotPassword": "Forgot password?",
|
||
"forgotPasswordTitle": "Forgot password",
|
||
"forgotPasswordSent": "Check your inbox",
|
||
"forgotPasswordDescription": "Enter your email and we'll send you a reset link.",
|
||
"forgotPasswordSentDescription": "If an account exists for that email, you'll receive a reset link shortly.",
|
||
"forgotPasswordFailed": "Failed to send reset email",
|
||
"sendResetLink": "Send reset link",
|
||
"sendingLink": "Sending…",
|
||
"resetPasswordTitle": "Reset password",
|
||
"resetPasswordDescription": "Enter a new password for your account.",
|
||
"newPassword": "New password",
|
||
"confirmPassword": "Confirm password",
|
||
"updatePassword": "Update password",
|
||
"updatingPassword": "Updating…",
|
||
"invalidToken": "Invalid or missing reset token.",
|
||
"resetPasswordMismatch": "Passwords don't match",
|
||
"resetPasswordFailed": "Reset failed — link may have expired",
|
||
"resetPasswordSuccess": "Password updated",
|
||
"noAccount": "No account? Sign up",
|
||
"alreadyHaveAccount": "Already have an account? Sign in",
|
||
"backToSignIn": "Back to sign in",
|
||
"emailNotVerified": "Email not verified",
|
||
"checkInboxVerification": "Check your inbox for a verification email.",
|
||
"resendVerification": "Resend verification email",
|
||
"resendingSending": "Sending…",
|
||
"resendFailed": "Failed to resend",
|
||
"resendSuccess": "Verification email sent — check your inbox",
|
||
"or": "or"
|
||
},
|
||
"recipes": {
|
||
"title": "Recipes",
|
||
"subtitle": "Your personal recipe library",
|
||
"new": "New recipe",
|
||
"newTitle": "New recipe",
|
||
"newSubtitle": "Build your recipe from scratch",
|
||
"importUrl": "Import URL",
|
||
"generate": "Generate",
|
||
"search": "Search recipes…",
|
||
"noRecipes": "No recipes yet",
|
||
"noMatch": "No recipes match",
|
||
"clearSearch": "Clear search",
|
||
"createFirst": "Create your first recipe",
|
||
"resultSingular": "result",
|
||
"resultPlural": "results",
|
||
"for": "for"
|
||
},
|
||
"recipeForm": {
|
||
"titleLabel": "Title *",
|
||
"titleRequired": "Title is required",
|
||
"titlePlaceholder": "My amazing recipe",
|
||
"descriptionLabel": "Description",
|
||
"descriptionPlaceholder": "What makes this recipe special…",
|
||
"servings": "Servings",
|
||
"prepMins": "Prep (min)",
|
||
"cookMins": "Cook (min)",
|
||
"difficulty": "Difficulty",
|
||
"visibility": "Visibility",
|
||
"tags": "Tags",
|
||
"tagsHelp": "Press Enter to add · Backspace to remove last · max 20 tags",
|
||
"tagsPlaceholder": "Add tags… (press Enter)",
|
||
"dietaryTags": "Dietary tags",
|
||
"photos": "Photos",
|
||
"ingredients": "Ingredients",
|
||
"amount": "Amount",
|
||
"unit": "Unit",
|
||
"ingredient": "Ingredient",
|
||
"note": "Note",
|
||
"addIngredient": "Add ingredient",
|
||
"steps": "Steps",
|
||
"stepPlaceholder": "Step {n}…",
|
||
"timerSeconds": "Timer (s)",
|
||
"addStep": "Add step",
|
||
"saving": "Saving…",
|
||
"saveChanges": "Save changes",
|
||
"createRecipe": "Create recipe",
|
||
"updateSuccess": "Recipe updated",
|
||
"createSuccess": "Recipe created",
|
||
"saveError": "Failed to save recipe"
|
||
},
|
||
"canCook": {
|
||
"title": "What can I cook?",
|
||
"subtitle": "Recipes you can make with your pantry",
|
||
"emptyPantry": "Your pantry is empty",
|
||
"addPantryItems": "Add pantry items",
|
||
"readyToCook": "Ready to cook",
|
||
"almostThere": "Almost there (70–99%)",
|
||
"partialMatches": "Partial matches",
|
||
"noMatches": "No strong matches found",
|
||
"missing": "Missing",
|
||
"ingredientProgress": "{matched}/{total} ingredients"
|
||
},
|
||
"mealPlan": {
|
||
"title": "Meal Plan",
|
||
"shoppingLists": "Shopping lists",
|
||
"addTo": "Add to {day} – {meal}",
|
||
"searchRecipes": "Search recipes…",
|
||
"servings": "Servings",
|
||
"difficulty": "Difficulty",
|
||
"noRecipes": "No recipes found",
|
||
"addFailed": "Failed to add",
|
||
"addedToPantry": "{count, plural, one {1 item added to pantry} other {{count} items added to pantry}}",
|
||
"listCreated": "List created",
|
||
"days": {
|
||
"mon": "Mon",
|
||
"tue": "Tue",
|
||
"wed": "Wed",
|
||
"thu": "Thu",
|
||
"fri": "Fri",
|
||
"sat": "Sat",
|
||
"sun": "Sun"
|
||
},
|
||
"meals": {
|
||
"breakfast": "Breakfast",
|
||
"lunch": "Lunch",
|
||
"dinner": "Dinner",
|
||
"snack": "Snack"
|
||
},
|
||
"generateWithAi": "Generate with AI",
|
||
"aiModalDescription": "AI will generate a full week of meals and create draft recipes for you.",
|
||
"dietaryPrefs": "Dietary preferences",
|
||
"dietaryPrefsPlaceholder": "e.g. vegetarian, gluten-free, low-carb…",
|
||
"aiPantryNote": "Your pantry items will be considered when available.",
|
||
"generating": "Generating…",
|
||
"generate": "Generate",
|
||
"cancel": "Cancel",
|
||
"aiGenerated": "Meal plan generated!",
|
||
"includePantryItems": "Include pantry items",
|
||
"pantryMode": "Pantry mode — maximize use of what you have",
|
||
"pantryModeDescription": "Prefer meals that use multiple pantry ingredients and minimize extra shopping."
|
||
},
|
||
"pantry": {
|
||
"title": "Pantry",
|
||
"subtitle": "Track what you have on hand",
|
||
"canCook": "What can I cook?"
|
||
},
|
||
"feed": {
|
||
"title": "Feed",
|
||
"followEmpty": "Follow chefs to see their recipes here.",
|
||
"noNew": "No new recipes from people you follow.",
|
||
"following": "Following",
|
||
"trending": "Trending",
|
||
"trendingEmpty": "No trending recipes this week.",
|
||
"loading": "Loading…"
|
||
},
|
||
"shoppingLists": {
|
||
"title": "Shopping Lists",
|
||
"subtitle": "Plan your grocery runs",
|
||
"empty": "No shopping lists yet",
|
||
"listEmpty": "Empty",
|
||
"generated": "Generated",
|
||
"items": "{checked}/{total} items"
|
||
},
|
||
"collections": {
|
||
"title": "Collections",
|
||
"subtitle": "Curate your favorite recipes into collections",
|
||
"empty": "No collections yet",
|
||
"public": "Public",
|
||
"recipeCount": "{count} recipe",
|
||
"recipeCountPlural": "{count} recipes"
|
||
},
|
||
"social": {
|
||
"followed": "Following",
|
||
"unfollowed": "Unfollowed",
|
||
"commentFailed": "Failed to post comment",
|
||
"deleted": "Deleted",
|
||
"ratingSaved": "Rating saved",
|
||
"collectionCreated": "Collection created",
|
||
"collectionForked": "Collection forked to your library",
|
||
"inviteSent": "Invitation sent",
|
||
"memberRemoved": "Member removed"
|
||
},
|
||
"cookingMode": {
|
||
"cooking": "Cooking",
|
||
"stepOf": "Step {current} of {total}",
|
||
"ingredients": "Ingredients",
|
||
"startTimer": "Start timer",
|
||
"timerDone": "Done",
|
||
"pause": "Pause",
|
||
"reset": "Reset",
|
||
"previous": "Previous",
|
||
"next": "Next",
|
||
"finish": "Done!",
|
||
"voiceNotSupported": "Voice not supported in this browser",
|
||
"voiceError": "Voice error — try again",
|
||
"enableVoice": "Enable voice control",
|
||
"stopVoice": "Stop voice",
|
||
"toggleIngredients": "Toggle ingredients",
|
||
"shortcutsTitle": "Shortcuts & commands",
|
||
"keyboardSection": "Keyboard",
|
||
"voiceSection": "Voice commands",
|
||
"enableMicFirst": "Enable voice via the mic button first.",
|
||
"stepRepeatPrefix": "Step {n}: ",
|
||
"shortcuts": {
|
||
"nextStep": "Next step",
|
||
"prevStep": "Previous step",
|
||
"startTimer": "Start timer",
|
||
"toggleHelp": "Toggle this panel",
|
||
"exitMode": "Exit cook mode"
|
||
},
|
||
"voiceLabels": {
|
||
"nextCmd": "next / continue",
|
||
"prevCmd": "previous / back",
|
||
"timerCmd": "timer / start",
|
||
"stopCmd": "stop / pause",
|
||
"resetCmd": "reset",
|
||
"repeatCmd": "repeat / again",
|
||
"nextLabel": "Next step",
|
||
"prevLabel": "Previous step",
|
||
"timerLabel": "Start timer",
|
||
"stopLabel": "Pause timer",
|
||
"resetLabel": "Reset timer",
|
||
"repeatLabel": "Re-read step"
|
||
}
|
||
},
|
||
"settingsForm": {
|
||
"profile": "Profile",
|
||
"displayName": "Display name",
|
||
"email": "Email",
|
||
"emailReadOnly": "Email cannot be changed here.",
|
||
"saving": "Saving…",
|
||
"title": "Settings",
|
||
"subtitle": "Manage your account and preferences",
|
||
"language": "Language",
|
||
"languageDescription": "Choose your preferred language for the app and AI-generated content.",
|
||
"changeEmail": "Change email",
|
||
"newEmail": "New email address",
|
||
"changeEmailDescription": "A verification link will be sent to your new address before it takes effect.",
|
||
"sendVerification": "Send verification",
|
||
"sendingVerification": "Sending…",
|
||
"emailChangeSent": "Verification email sent. Check your inbox.",
|
||
"emailChangeFailed": "Failed to send verification email.",
|
||
"changePassword": "Change password",
|
||
"currentPassword": "Current password",
|
||
"newPassword": "New password",
|
||
"confirmPassword": "Confirm new password",
|
||
"passwordMismatch": "Passwords don't match.",
|
||
"changingPassword": "Changing…",
|
||
"changePasswordButton": "Change password",
|
||
"passwordChanged": "Password changed successfully.",
|
||
"passwordChangeFailed": "Failed to change password.",
|
||
"webhookCreateFailed": "Failed to create webhook",
|
||
"webhookDeleteFailed": "Failed to delete webhook",
|
||
"webhookUpdateFailed": "Failed to update webhook",
|
||
"redeliverySuccess": "Redelivery queued",
|
||
"redeliveryFailed": "Failed to redeliver",
|
||
"apiKeyCreateFailed": "Failed to create API key",
|
||
"apiKeyRevokeFailed": "Failed to revoke API key",
|
||
"copyFailed": "Failed to copy to clipboard",
|
||
"byokSaveFailed": "Failed to save key",
|
||
"byokRemoveFailed": "Failed to remove key",
|
||
"modelSaved": "Model preferences saved",
|
||
"modelSaveFailed": "Failed to save",
|
||
"userUpdated": "User updated successfully",
|
||
"userUpdateFailed": "Failed to save",
|
||
"adminSettingsSaved": "Settings saved",
|
||
"adminSettingsFailed": "Failed to save settings",
|
||
"nutritionGoalsSaved": "Nutrition goals saved",
|
||
"bio": "Bio",
|
||
"publicBio": "Public bio",
|
||
"publicBioDescription": "Shown on your public profile.",
|
||
"publicBioPlaceholder": "Tell other cooks about yourself…",
|
||
"privateBio": "AI context (private)",
|
||
"privateBioDescription": "Never shown publicly. Injected into AI prompts to personalise suggestions — add your dietary preferences, kitchen equipment, cooking skill level, allergies, etc.",
|
||
"privateBioPlaceholder": "e.g. I'm vegetarian, have a stand mixer and an air fryer, intermediate cook, allergic to tree nuts, prefer Mediterranean flavours…"
|
||
}
|
||
}
|