Add Swedish localization for various app actions and inventory management strings
This commit is contained in:
+449
-1
@@ -73,5 +73,453 @@
|
||||
"forbiddenError": "You do not have permission to use this feature.",
|
||||
"serverError": "A server error occurred. Try again in a moment.",
|
||||
"networkError": "Network error. Check your connection and try again.",
|
||||
"unexpectedError": "An unexpected error occurred."
|
||||
"unexpectedError": "An unexpected error occurred.",
|
||||
|
||||
"cancelAction": "Cancel",
|
||||
"saveAction": "Save",
|
||||
"deleteAction": "Delete",
|
||||
"addAction": "Add",
|
||||
"editTooltip": "Edit",
|
||||
"deleteTooltip": "Delete",
|
||||
"loadingLabel": "Loading...",
|
||||
"cannotBeUndone": "This action cannot be undone.",
|
||||
"yesLabel": "Yes",
|
||||
"noLabel": "No",
|
||||
"commentLabel": "Comment",
|
||||
"commentOptionalLabel": "Comment (optional)",
|
||||
"openedLabel": "Opened",
|
||||
"quantityLabel": "Quantity *",
|
||||
"quantityHint": "Enter quantity",
|
||||
"invalidNumber": "Invalid number",
|
||||
"unitLabel": "Unit *",
|
||||
"selectDateLabel": "Select date",
|
||||
"locationOptionalLabel": "Location (optional)",
|
||||
"locationLabel": "Location",
|
||||
"brandOptionalLabel": "Brand (optional)",
|
||||
"brandLabel": "Brand",
|
||||
"enterPositiveNumber": "Enter a positive number",
|
||||
|
||||
"inventoryTitle": "Inventory",
|
||||
"inventoryFilterAndSort": "Filter and sorting",
|
||||
"inventorySortLatest": "Latest added",
|
||||
"inventorySortNameAsc": "Name A-Z",
|
||||
"inventorySortBestBeforeAsc": "Best before ascending",
|
||||
"inventorySortBestBeforeDesc": "Best before descending",
|
||||
"inventorySortLabel": "Sort",
|
||||
"inventoryAllFilter": "All",
|
||||
"inventoryEmpty": "Inventory is empty.",
|
||||
"inventoryLoading": "Loading inventory...",
|
||||
"inventoryCreateTitle": "Add inventory item",
|
||||
"inventoryEditTitle": "Edit inventory item",
|
||||
"inventorySelectProduct": "Select a product from the list.",
|
||||
"inventoryDeleteTitle": "Delete inventory item?",
|
||||
"inventoryProductLabel": "Product",
|
||||
"inventoryQuantityDisplayLabel": "Quantity",
|
||||
"inventoryLocationDisplayLabel": "Location",
|
||||
"inventoryBrandDisplayLabel": "Brand",
|
||||
"inventoryPurchaseDateLabel": "Purchase date",
|
||||
"inventoryBestBeforeLabel": "Best before",
|
||||
"inventoryPurchaseDatePrefix": "Purchase: ",
|
||||
"inventoryBestBeforeDatePrefix": "Best before: ",
|
||||
"inventoryConsumeAction": "Consume",
|
||||
"inventoryHistoryAction": "Consumption history",
|
||||
"inventoryConsumeAmountLabel": "Amount to consume *",
|
||||
"inventoryHistoryLoading": "Loading history...",
|
||||
"inventoryHistoryEmpty": "No consumption history exists.",
|
||||
"inventoryRecipesAction": "Recipes",
|
||||
"inventoryHistoryTitle": "History: {name}",
|
||||
"@inventoryHistoryTitle": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"inventoryConsumeNameTitle": "Consume: {name}",
|
||||
"@inventoryConsumeNameTitle": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"inventoryAvailableLabel": "Available: {quantity} {unit}",
|
||||
"@inventoryAvailableLabel": {
|
||||
"placeholders": {
|
||||
"quantity": { "type": "String" },
|
||||
"unit": { "type": "String" }
|
||||
}
|
||||
},
|
||||
|
||||
"pantryDescription": "Products you always expect to have at home.",
|
||||
"pantryLoading": "Loading pantry...",
|
||||
"pantryNoLocation": "No location selected",
|
||||
"pantryInvalidQuantity": "Enter a valid quantity greater than 0.",
|
||||
"pantryRemoveTitle": "Remove from pantry?",
|
||||
"pantryOtherCategory": "Other",
|
||||
"pantryGoToRecipesTooltip": "Go to recipes",
|
||||
"pantryAddToInventoryTitle": "Add \"{name}\" to inventory",
|
||||
"@pantryAddToInventoryTitle": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"pantryItemAdded": "{name} added to inventory.",
|
||||
"@pantryItemAdded": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"pantryRemoveContent": "Do you want to remove \"{name}\"?",
|
||||
"@pantryRemoveContent": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
|
||||
"recipesLoading": "Loading recipes...",
|
||||
"recipesEmpty": "No recipes found",
|
||||
"recipesEmptyDescription": "Add a recipe to get started.",
|
||||
"recipesNewTooltip": "New recipe",
|
||||
"recipeDetailLoading": "Loading recipe...",
|
||||
"recipeDetailMakePrivate": "Make private",
|
||||
"recipeDetailMakePublic": "Make public",
|
||||
"recipeDetailShareWithUser": "Share with user",
|
||||
"recipeDetailGoToInventory": "Go to inventory",
|
||||
"recipeDetailShareTitle": "Share recipe",
|
||||
"recipeDetailUsernameLabel": "Username",
|
||||
"recipeDetailUsernameHint": "e.g. anna",
|
||||
"recipeDetailRemoveShare": "Remove sharing",
|
||||
"recipeDetailShareAction": "Share",
|
||||
"recipeDetailDeleteTitle": "Delete recipe?",
|
||||
"recipeDetailNowPublic": "The recipe is now public.",
|
||||
"recipeDetailNowPrivate": "The recipe is now private.",
|
||||
"recipeDetailServings": "servings",
|
||||
"recipeDetailIngredients": "Ingredients",
|
||||
"recipeDetailInstructions": "Instructions",
|
||||
"recipeDetailBackToList": "Back to recipe list",
|
||||
"recipeDetailSharingRemoved": "Sharing removed for {user}",
|
||||
"@recipeDetailSharingRemoved": {
|
||||
"placeholders": {
|
||||
"user": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"recipeDetailSharedWith": "Recipe shared with {user}",
|
||||
"@recipeDetailSharedWith": {
|
||||
"placeholders": {
|
||||
"user": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"recipeDetailDeleteContent": "Do you want to delete \"{title}\"? This action cannot be undone.",
|
||||
"@recipeDetailDeleteContent": {
|
||||
"placeholders": {
|
||||
"title": { "type": "String" }
|
||||
}
|
||||
},
|
||||
|
||||
"recipeCreateTitle": "New recipe",
|
||||
"recipeCreateReviewIngredients": "Review ingredients",
|
||||
"recipeCreateMarkdownPlaceholder": "# Recipe name\n\n## Ingredients\n- 500 g ground beef\n- 1 onion\n\n## Instructions\nFry the onion...",
|
||||
"recipeCreateMarkdownHint": "Paste or write a recipe in Markdown format.",
|
||||
"recipeCreateNameRequired": "Recipe name cannot be empty.",
|
||||
"recipeCreateSaveAction": "Save recipe",
|
||||
"recipeCreateServingsLabel": "Number of servings (optional)",
|
||||
"recipeCreateIngredientsLabel": "Ingredients",
|
||||
"recipeCreateIngredientsHint": "Check ingredients to include and select the right product.",
|
||||
"recipeCreateNoProductFound": "No product found — ingredient will be skipped.",
|
||||
|
||||
"recipeEditTitle": "Edit recipe",
|
||||
"recipeEditNameLabel": "Recipe name",
|
||||
"recipeEditNameRequired": "Enter a recipe name.",
|
||||
"recipeEditDescriptionLabel": "Description (optional)",
|
||||
"recipeEditServingsLabel": "Number of servings (optional)",
|
||||
"recipeEditServingsInvalid": "Enter a whole number.",
|
||||
"recipeEditInstructionsLabel": "Instructions (optional)",
|
||||
"recipeEditIngredientsLabel": "Ingredients",
|
||||
"recipeEditIngredientsHint": "Select product, quantity and unit for each ingredient.",
|
||||
"recipeEditNoIngredients": "No ingredients added yet.",
|
||||
"recipeEditIngredientPrefix": "Ingredient ",
|
||||
"recipeEditRemoveIngredient": "Remove ingredient",
|
||||
"recipeEditMinIngredients": "At least one ingredient is required.",
|
||||
"recipeEditSelectProduct": "Select product for all ingredients.",
|
||||
"recipeEditValidQuantity": "Enter valid quantity for all ingredients.",
|
||||
"recipeEditSelectUnit": "Select unit for all ingredients.",
|
||||
"recipeEditSaveChanges": "Save changes",
|
||||
|
||||
"importTabDescription": "Upload a PDF or image, or enter a recipe link — the recipe will be imported and opened directly in edit mode.",
|
||||
"importFileTabLabel": "File / PDF",
|
||||
"importLinkTabLabel": "Link",
|
||||
"importChooseFileAction": "Choose file (PDF, PNG, JPG, WEBP, BMP)",
|
||||
"importFileAction": "Import file",
|
||||
"importFileProcessing": "Parsing recipe — this can take up to a minute...",
|
||||
"importLinkAction": "Import from link",
|
||||
"importLinkLabel": "Recipe link",
|
||||
"importLinkHint": "https://example.com/recipe/...",
|
||||
"importWriteInstead": "Write recipe instead",
|
||||
|
||||
"errorDialogTitle": "Error",
|
||||
"errorDialogClose": "Close",
|
||||
"errorDialogCopy": "Copy",
|
||||
"errorDialogCopied": "Error message copied!",
|
||||
|
||||
"profileMyProfileTab": "My profile",
|
||||
"profileDatabaseTab": "Database",
|
||||
"profileUsersTab": "Users",
|
||||
"profilePendingTab": "Suggestions",
|
||||
"profileAiTab": "AI",
|
||||
"profileUsernameLabel": "Username",
|
||||
"profileEmailLabel": "E-mail",
|
||||
"profileEmailHint": "Enter an e-mail address",
|
||||
"profileEmailInvalid": "Invalid e-mail address",
|
||||
"profileFirstNameLabel": "First name",
|
||||
"profileLastNameLabel": "Last name",
|
||||
"profileSaveAction": "Save changes",
|
||||
"profileSaved": "Profile saved!",
|
||||
"profileInventoryTab": "Inventory",
|
||||
"profilePantryTab": "Pantry",
|
||||
"profileProductsTab": "Products",
|
||||
"profileAddInventoryItem": "Add inventory item",
|
||||
"profileOpenInventory": "Open inventory",
|
||||
"profileInventoryDescription": "Update and consume items in your inventory.",
|
||||
"profileOpenPantry": "Open pantry",
|
||||
"profilePantryDescription": "Manage items you always expect to have at home.",
|
||||
|
||||
"adminChangeRole": "Change role",
|
||||
"adminGivePremium": "Give Premium",
|
||||
"adminRemovePremium": "Remove Premium",
|
||||
"adminAllowSharing": "Allow recipe sharing",
|
||||
"adminBlockSharing": "Block recipe sharing",
|
||||
"adminResetPassword": "Reset password",
|
||||
"adminTempPasswordTitle": "Temporary password",
|
||||
"adminCopyAction": "Copy",
|
||||
"adminCloseAction": "Close",
|
||||
"adminEmailLabel": "E-mail",
|
||||
"adminEmailInvalid": "Invalid e-mail address.",
|
||||
"adminEmailUpdated": "E-mail updated.",
|
||||
"adminDeleteUser": "Delete user",
|
||||
"adminDeleteUserConfirm": "Delete permanently? This cannot be undone.",
|
||||
"adminConfirmAction": "Confirm",
|
||||
"adminNewUser": "New user",
|
||||
"adminNoUsers": "No users found.",
|
||||
"adminAdminRole": "Admin",
|
||||
"adminUserRole": "User",
|
||||
"adminPremiumLabel": "Premium",
|
||||
"adminFreeLabel": "Free",
|
||||
"adminSharingOn": "Sharing: On",
|
||||
"adminSharingOff": "Sharing: Off",
|
||||
"adminUsersDescription": "Manage users directly from the profile page.",
|
||||
"adminDowngradeToUser": "Downgrade to user",
|
||||
"adminUpgradeToAdmin": "Upgrade to admin",
|
||||
"adminSortNewest": "Sort: Newest",
|
||||
"adminSortOldest": "Sort: Oldest",
|
||||
"adminSortNameAsc": "Sort: Name A-Z",
|
||||
"adminSortNameDesc": "Sort: Name Z-A",
|
||||
"adminSortCategoryAsc": "Sort: Category A-Z",
|
||||
"adminSortCategoryDesc": "Sort: Category Z-A",
|
||||
"adminSearchProduct": "Search product",
|
||||
"adminShowDeleted": "Show deleted",
|
||||
"adminOnlyUncategorized": "Only uncategorized",
|
||||
"adminBulkSetCategory": "Bulk: set category",
|
||||
"adminProductsUpdated": "Products updated.",
|
||||
"adminNoAiSuggestions": "No AI suggestions to show.",
|
||||
"adminMergeProducts": "Merge products",
|
||||
"adminMergeSelectSource": "Select which product should be moved into the other:",
|
||||
"adminMergeSource": "Source: ",
|
||||
"adminMergeTarget": "Target: ",
|
||||
"adminMergeAction": "Merge",
|
||||
"adminDeleteProduct": "Delete product",
|
||||
"adminProductDeleted": "Product deleted.",
|
||||
"adminProductsRestored": "Selected products restored.",
|
||||
"adminProductRestored": "Product restored.",
|
||||
"adminNoPendingProducts": "No pending product suggestions.",
|
||||
"adminCategoryPrefix": "Category: ",
|
||||
"adminSuggestedByPrefix": "Suggested by: ",
|
||||
"adminDatePrefix": "Date: ",
|
||||
"adminApproveAction": "Approve",
|
||||
"adminRejectAction": "Reject",
|
||||
"adminPendingDescription": "Approve or reject pending product suggestions directly from the profile page.",
|
||||
"adminAiDescription": "Overview of AI functions exposed by the backend.",
|
||||
"adminPagePrefix": "Page: ",
|
||||
"adminNewProductLabel": "New product",
|
||||
"adminPasswordMustChange": "The user must change their password at next login.",
|
||||
"adminChangeRoleConfirm": "Change {username} to {role}?",
|
||||
"@adminChangeRoleConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" },
|
||||
"role": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminGivePremiumConfirm": "Give Premium for {username}",
|
||||
"@adminGivePremiumConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminRemovePremiumConfirm": "Remove Premium for {username}",
|
||||
"@adminRemovePremiumConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminAllowSharingConfirm": "Allow recipe sharing for {username}",
|
||||
"@adminAllowSharingConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminBlockSharingConfirm": "Block recipe sharing for {username}",
|
||||
"@adminBlockSharingConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminResetPasswordContent": "Generate a temporary password for {username}",
|
||||
"@adminResetPasswordContent": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminPasswordTitle": "Password for {username}",
|
||||
"@adminPasswordTitle": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminChangeEmailTitle": "Change e-mail for {username}",
|
||||
"@adminChangeEmailTitle": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminDeleteProductContent": "Delete {name}? The product can be restored later.",
|
||||
"@adminDeleteProductContent": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminAiAppliedCount": "AI suggestions applied to {count} products.",
|
||||
"@adminAiAppliedCount": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminCategoryUpdated": "Category updated for {name}",
|
||||
"@adminCategoryUpdated": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminProductUpdated": "Product updated for {name}",
|
||||
"@adminProductUpdated": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminPremiumConfirm": "{action} Premium for {username}?",
|
||||
"@adminPremiumConfirm": {
|
||||
"placeholders": {
|
||||
"action": { "type": "String" },
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminSharingConfirm": "{action} recipe sharing for {username}?",
|
||||
"@adminSharingConfirm": {
|
||||
"placeholders": {
|
||||
"action": { "type": "String" },
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminResetPasswordConfirm": "Generate a temporary password for {username}?",
|
||||
"@adminResetPasswordConfirm": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminTempPasswordForUser": "Password for {username}:",
|
||||
"@adminTempPasswordForUser": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminEmailEditTitle": "Change e-mail for {username}",
|
||||
"@adminEmailEditTitle": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminEmailAction": "Change e-mail",
|
||||
"adminUserCreated": "User {username} created.",
|
||||
"@adminUserCreated": {
|
||||
"placeholders": {
|
||||
"username": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminCreateUserTitle": "Create user",
|
||||
"adminMinChars2": "At least 2 characters",
|
||||
"adminMinChars8": "At least 8 characters",
|
||||
"adminPasswordLabel": "Password",
|
||||
"adminRoleLabel": "Role",
|
||||
"adminCreateAction": "Create",
|
||||
"adminUsersDescription": "Manage users directly from the profile page.",
|
||||
"adminDowngradeToUser": "Downgrade to user",
|
||||
"adminUpgradeToAdmin": "Upgrade to admin",
|
||||
"adminSharingOn": "Sharing: On",
|
||||
"adminSharingOff": "Sharing: Off",
|
||||
"adminMergeProductsTitle": "Merge products",
|
||||
"adminMergeProductsHint": "Select which product should be moved into the other:",
|
||||
"adminMergeAction": "Merge",
|
||||
"adminMerge2Selected": "Merge 2 selected",
|
||||
"adminProductsMerged": "Products merged.",
|
||||
"adminDeleteProductTitle": "Delete product",
|
||||
"adminDeleteProductConfirm": "Delete {name}? The product can be restored later.",
|
||||
"@adminDeleteProductConfirm": {
|
||||
"placeholders": {
|
||||
"name": { "type": "String" }
|
||||
}
|
||||
},
|
||||
"adminProductDeleted": "Product deleted.",
|
||||
"adminProductsUpdated": "Products updated.",
|
||||
"adminNoAiSuggestions": "No AI suggestions to show.",
|
||||
"adminAiSuggestionsTitle": "AI suggestions",
|
||||
"adminAiApplied": "AI suggestions applied to {count} products.",
|
||||
"@adminAiApplied": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminApplySelected": "Apply ({count})",
|
||||
"@adminApplySelected": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminUpdateSelected": "Update selected ({count})",
|
||||
"@adminUpdateSelected": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminAiCategorizeAll": "AI-categorize uncategorized",
|
||||
"adminAiCategorizeSelected": "AI-categorize selected ({count})",
|
||||
"@adminAiCategorizeSelected": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminRestoreSelected": "Restore selected ({count})",
|
||||
"@adminRestoreSelected": {
|
||||
"placeholders": {
|
||||
"count": { "type": "int" }
|
||||
}
|
||||
},
|
||||
"adminSearchProduct": "Search product",
|
||||
"adminShowDeleted": "Show deleted",
|
||||
"adminShowUncategorized": "Uncategorized only",
|
||||
"adminBulkSetCategory": "Bulk: set category",
|
||||
"adminRemoveCategory": "Remove category",
|
||||
"adminNoProductsFound": "No products match the filter.",
|
||||
"adminInlineCategory": "Category (inline)",
|
||||
"adminNoCategory": "No category",
|
||||
"adminRestoreAction": "Restore",
|
||||
"required": "Required",
|
||||
"logoutAction": "Log out",
|
||||
"adminAiDescription": "Overview of AI features exposed by the backend.",
|
||||
"adminPagePrefix": "Page: ",
|
||||
"profileDatabaseDescription": "The database tab covers the same main areas as in recipe-frontend."
|
||||
}
|
||||
Reference in New Issue
Block a user