i18n(app-svep) + i18n-vakt: hela mobil-UI:t översatt + CI-vakt mot regress
- Svepte 51 hårdkodade strängar -> t() över konto, sök/bläddra, sparade recept, kök, planera, skanna, byt måltid, inköp, minne, cooking, api-fel (+ locLabel/ kategorier via nycklar). 47 nya nycklar, översatta till alla 12 språk. - NY: apps/mobile/scripts/i18n-check.mjs (i18n:check) – fäller bygget om ett språk saknar en nyckel, en använd nyckel saknas, eller det finns hårdkodad UI-text. Wire:ad i CI (.github/workflows/ci.yml) efter typecheck. => 'lägg till språk' blir: kör vakten, den listar exakt vad som fattas. Aldrig mer leta för hand. - Prettier-fixade 5 filer från tidigare leveranser så format:check blir grön. - submit-recipe fri-text-payload + firebase dev-stubs markerade // i18n-ignore. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -51,6 +51,53 @@
|
||||
"common.add": "Add",
|
||||
"common.back": "Back",
|
||||
"common.cancel": "Cancel",
|
||||
"common.remove": "Remove",
|
||||
"common.all": "All",
|
||||
"auth.tagline": "Less waste, less stress, more left in your wallet",
|
||||
"auth.passwordMin8": "Password must be at least 8 characters.",
|
||||
"auth.passwordMismatch": "Passwords don't match.",
|
||||
"auth.repeatPassword": "Repeat password",
|
||||
"plan.swapDish": "Swap dish",
|
||||
"scan.maxTitle": "Done",
|
||||
"scan.maxBody": "Max {max} photos this scan – analyzing.",
|
||||
"scan.photoTaken": "Photo {count} taken",
|
||||
"scan.multiAngleHint": "Feel free to take more angles of the same spot – the app lists each item once. Each photo counts as one scan.",
|
||||
"scan.takeAnother": "Take another",
|
||||
"scan.analyzeCount": "Analyze ({count})",
|
||||
"scan.tips.merge": "Fridge/freezer/pantry: take several photos in the same scan – the app merges duplicates.",
|
||||
"cooking.timerHint": "Approximate time for the step – use your phone's own timer.",
|
||||
"kitchen.deleteConfirm": "Remove selected items from {label}?",
|
||||
"kitchen.scopeSearch": "the search",
|
||||
"kitchen.scopeAll": "the whole inventory",
|
||||
"kitchen.scopeSelection": "the selection",
|
||||
"kitchen.searchPlaceholder": "Search item…",
|
||||
"kitchen.clearList": "Clear list",
|
||||
"kitchen.empty": "No items to show. Scan or add items.",
|
||||
"kitchen.pastBefore": "best before",
|
||||
"memory.trainingNote": "Personal memory is never used as training data without separate consent.",
|
||||
"recipe.source": "Source: {name}",
|
||||
"recipes.sub.bread": "Bread",
|
||||
"recipes.sub.bun": "Buns",
|
||||
"recipes.sub.pie": "Pie",
|
||||
"recipes.sub.cake": "Cakes & bakes",
|
||||
"recipes.sub.cookie": "Cookies",
|
||||
"recipes.searchPlaceholder": "Search recipes…",
|
||||
"recipes.emptyCategory": "No recipes in this category yet – they'll appear as the catalog grows.",
|
||||
"savedRecipes.searchPlaceholder": "Search your saved recipes",
|
||||
"savedRecipes.empty": "You don't have any saved recipes yet. Tap ☆ Save on a recipe and it'll show up here.",
|
||||
"savedRecipes.emptySearch": "No saved recipes match your search.",
|
||||
"shopping.removeConfirm": "Remove the item from the list?",
|
||||
"swap.addTitle": "Add meal",
|
||||
"swap.swapTitle": "Swap meal",
|
||||
"swap.chooseFor": "Choose a dish for {meal} – or search for any dish.",
|
||||
"swap.chooseOther": "Choose a different dish for {meal} – or search for any dish.",
|
||||
"swap.mealLunch": "lunch",
|
||||
"swap.mealBreakfast": "breakfast",
|
||||
"swap.mealDinner": "dinner",
|
||||
"swap.searchPlaceholder": "Search all recipes …",
|
||||
"swap.showingResults": "Showing results for ”{query}”.",
|
||||
"swap.clearHint": "Clear the search box and search with it empty to see suggestions again.",
|
||||
"errors.uploadTimeout": "The upload took too long – check your network and try again.",
|
||||
"common.done": "Done",
|
||||
"common.error": "Something went wrong. Please try again.",
|
||||
"common.estimate": "Estimate",
|
||||
|
||||
Reference in New Issue
Block a user