* Extended functionalities

* Added different UIs
This commit is contained in:
2026-06-24 21:43:40 +02:00
parent 282f4864c4
commit f15bb7a916
348 changed files with 59057 additions and 498 deletions

View File

@@ -0,0 +1,440 @@
{
"app": {
"name": "DailyMeals"
},
"language": {
"label": "Język",
"en": "Angielski",
"pl": "Polski"
},
"layout": {
"label": "Układ",
"sidebar": "Panel boczny",
"topnav": "Nawigacja górna",
"compact": "Wąski panel",
"wide": "Szeroki panel",
"wideTagline": "Planuj posiłki wygodnie"
},
"appearance": {
"label": "Wygląd",
"forest": "Leśny klasyczny",
"forestDesc": "Zielona paleta, ikony konturowe",
"ocean": "Oceaniczna świeżość",
"oceanDesc": "Niebieska paleta, ikony konturowe",
"sunset": "Zachód kuchni",
"sunsetDesc": "Ciepła bursztynowa paleta, emoji",
"berry": "Jagodowy modern",
"berryDesc": "Fioletowa paleta, pogrubione ikony"
},
"nav": {
"dashboard": "Panel",
"breakfast": "Śniadanie",
"secondBreakfast": "Drugie śniadanie",
"lunch": "Obiad",
"dinner": "Kolacja",
"allMeals": "Wszystkie posiłki",
"manageMeals": "Zarządzaj posiłkami",
"mealPlanner": "Plan posiłków",
"shoppingList": "Lista zakupów",
"dietTracker": "Moja dieta",
"ingredientCatalog": "Składniki",
"dietGenerator": "Generator diety",
"recipeGenerator": "Generator przepisów",
"logout": "Wyloguj",
"user": "Użytkownik",
"toggleNav": "Przełącz nawigację",
"toggleTheme": "Przełącz motyw",
"lightMode": "Przełącz na jasny motyw",
"darkMode": "Przełącz na ciemny motyw"
},
"categories": {
"breakfast": "Śniadanie",
"secondBreakfast": "Drugie śniadanie",
"lunch": "Obiad",
"dinner": "Kolacja",
"unknown": "Nieznana"
},
"common": {
"loading": "Ładowanie...",
"tryAgain": "Spróbuj ponownie",
"back": "Wstecz",
"add": "Dodaj",
"category": "Kategoria",
"all": "Wszystkie",
"search": "Szukaj",
"save": "Zapisz",
"cancel": "Anuluj",
"edit": "Edytuj",
"delete": "Usuń",
"optional": "opcjonalnie",
"recipeCount_one": "{{count}} przepis",
"recipeCount_few": "{{count}} przepisy",
"recipeCount_many": "{{count}} przepisów",
"recipeCount_other": "{{count}} przepisów",
"selectedCount_one": "Wybrano: {{count}}",
"selectedCount_few": "Wybrano: {{count}}",
"selectedCount_many": "Wybrano: {{count}}",
"selectedCount_other": "Wybrano: {{count}}"
},
"auth": {
"signInSubtitle": "Zaloguj się, aby planować posiłki",
"email": "E-mail",
"password": "Hasło",
"emailPlaceholder": "ty@example.com",
"signIn": "Zaloguj się",
"signingIn": "Logowanie...",
"noAccount": "Nie masz konta?",
"createOne": "Utwórz je",
"createAccountTitle": "Utwórz konto",
"createAccountSubtitle": "Dołącz do DailyMeals, aby przeglądać i planować posiłki",
"displayName": "Nazwa wyświetlana",
"displayNamePlaceholder": "Piotr",
"confirmPassword": "Potwierdź hasło",
"passwordHint": "Co najmniej 8 znaków, w tym wielka litera, mała litera i cyfra.",
"createAccount": "Utwórz konto",
"creatingAccount": "Tworzenie konta...",
"hasAccount": "Masz już konto?"
},
"validation": {
"emailRequired": "E-mail jest wymagany.",
"emailInvalid": "Podaj prawidłowy adres e-mail.",
"passwordRequired": "Hasło jest wymagane.",
"displayNameTooLong": "Nazwa wyświetlana jest zbyt długa.",
"passwordMinLength": "Hasło musi mieć co najmniej 8 znaków.",
"passwordUppercase": "Dołącz co najmniej jedną wielką literę.",
"passwordLowercase": "Dołącz co najmniej jedną małą literę.",
"passwordDigit": "Dołącz co najmniej jedną cyfrę.",
"confirmPasswordRequired": "Potwierdź hasło.",
"passwordsMismatch": "Hasła nie są identyczne.",
"recipeNameRequired": "Nazwa przepisu jest wymagana.",
"ingredientNameRequired": "Nazwa składnika jest wymagana.",
"stepNumberMin": "Numer kroku musi być co najmniej 1.",
"stepDescriptionRequired": "Opis kroku jest wymagany.",
"stepsMin": "Dodaj co najmniej jeden krok przygotowania."
},
"errors": {
"generic": "Coś poszło nie tak.",
"signInFailed": "Nie udało się zalogować.",
"registerFailed": "Nie udało się utworzyć konta.",
"loadCategoriesFailed": "Nie udało się załadować kategorii.",
"loadRecipesFailed": "Nie udało się załadować przepisów.",
"loadRecipeFailed": "Nie udało się załadować przepisu.",
"loadDietFailed": "Nie udało się załadować danych diety.",
"loadMealPlanFailed": "Nie udało się załadować planu posiłków.",
"loadShoppingListFailed": "Nie udało się załadować listy zakupów.",
"loadIngredientCatalogFailed": "Nie udało się załadować katalogu składników.",
"saveIngredientFailed": "Nie udało się zapisać składnika.",
"saveRecipeFailed": "Nie udało się zapisać przepisu.",
"recalculateMacrosFailed": "Nie udało się przeliczyć makroskładników przepisów.",
"importFailed": "Import nie powiódł się.",
"pdfLoadFailed": "Nie udało się załadować przepisów do eksportu.",
"pdfGenerateFailed": "Generowanie PDF nie powiodło się.",
"pdfRenderAreaMissing": "Nie znaleziono obszaru renderowania PDF.",
"pdfNothingToExport": "Brak danych do eksportu."
},
"dashboard": {
"welcome": "Witaj ponownie",
"welcomeNamed": "Witaj ponownie, {{name}}",
"subtitle": "Przeglądaj przepisy według kategorii posiłków lub odkrywaj wszystkie naraz.",
"viewRecipes": "Zobacz przepisy"
},
"recipes": {
"allMealsTitle": "Wszystkie posiłki",
"allMealsSubtitle": "Wybierz przepisy i wyeksportuj je wraz ze wspólną listą zakupów.",
"selectAllVisible": "Zaznacz widoczne",
"deselectAll": "Odznacz wszystkie",
"searchRecipes": "Szukaj przepisów...",
"searchByIngredient": "Szukaj po składniku...",
"searchByIngredientLabel": "Szukaj po składniku",
"searchByNameAria": "Szukaj przepisów po nazwie",
"searchByIngredientAria": "Szukaj przepisów po składniku",
"noMatchingTitle": "Brak pasujących przepisów",
"noMatchingIngredient": "Żaden przepis nie zawiera tego składnika. Spróbuj innej nazwy.",
"noMatchingFilter": "Spróbuj zmienić wyszukiwanie lub filtr kategorii.",
"emptyCategoryTitle": "Brak przepisów: {{category}}",
"emptyCategoryDescription": "W tej kategorii nie ma jeszcze żadnych przepisów.",
"selectRecipe": "Wybierz {{name}}",
"prepTime": "{{count}} min przygotowania",
"calories": "Kalorie",
"protein": "Białko",
"fat": "Tłuszcz",
"carbs": "Węglowodany",
"ingredients": "Składniki",
"preparation": "Przygotowanie",
"noIngredients": "Brak składników.",
"noSteps": "Brak kroków.",
"kcal": "{{count}} kcal",
"minutes": "{{count}} min"
},
"manage": {
"title": "Zarządzaj posiłkami",
"subtitle": "Dodawaj przepisy ręcznie lub importuj je z arkusza Excel.",
"tabManual": "Dodaj ręcznie",
"tabEdit": "Edytuj przepisy",
"tabImport": "Import Excel",
"savedSuccess": "„{{name}}” zapisano pomyślnie.",
"basicInfo": "Podstawowe informacje",
"recipeName": "Nazwa przepisu",
"recipeNamePlaceholder": "Sałatka z grillowanym kurczakiem",
"prepTimeMin": "Czas przygotowania (min)",
"caloriesKcal": "Kalorie (kcal)",
"proteinG": "Białko (g)",
"fatG": "Tłuszcz (g)",
"carbsG": "Węglowodany (g)",
"preparationSteps": "Kroki przygotowania",
"addStep": "Dodaj krok",
"stepPlaceholder": "Opisz ten krok...",
"ingredientName": "Nazwa",
"ingredientGrams": "Gramy",
"ingredientUnit": "Jednostka",
"removeIngredient": "Usuń składnik",
"removeStep": "Usuń krok",
"saveRecipe": "Zapisz przepis",
"updateRecipe": "Aktualizuj przepis",
"updatedSuccess": "„{{name}}” zaktualizowano pomyślnie.",
"selectRecipeToEdit": "Wybierz przepis z listy, aby go edytować.",
"catalogLink": "Powiąż z katalogiem składników",
"estimatedFromCatalog": "Szacunkowo z powiązanych składników",
"unlinkedIngredientsWarning": "{{count}} składnik(ów) ma gramy, ale brak powiązania z katalogiem — makra mogą być niepełne.",
"recalculateMacros": "Przelicz wszystkie makra",
"recalculating": "Przeliczanie…",
"recalculateSuccess": "Zaktualizowano {{updated}} z {{processed}} przepisów. {{unlinked}} wierszy składników nadal niepowiązanych.",
"macroHint": "Szacunkowo: {{calories}} kcal · B {{protein}}g · T {{fat}}g · W {{carbs}}g",
"saving": "Zapisywanie...",
"importTitle": "Import z Excela",
"importDescription": "Użyj szablonu z trzema arkuszami: Recipes, Ingredients i Steps. Nazwy przepisów muszą się zgadzać między arkuszami.",
"downloadTemplate": "Pobierz szablon",
"uploadLabel": "Prześlij wypełniony plik .xlsx",
"importComplete": "Import zakończony",
"createdCount": "Utworzono: {{count}}",
"skippedCount": "Pominięto: {{count}}",
"importRecipes": "Importuj przepisy",
"importing": "Importowanie...",
"excelFormatTitle": "Format Excela",
"excelRecipesSheet": "Recipes: Name, MealCategory (Breakfast / Lunch / 03), Calories, Protein, Fat, Carbs, PrepTimeMinutes",
"excelIngredientsSheet": "Ingredients: RecipeName, Name, AmountGrams, Unit, SortOrder",
"excelStepsSheet": "Steps: RecipeName, StepNumber, Description",
"duplicateSkipped": "Duplikaty nazw przepisów są pomijane."
},
"generators": {
"diet": {
"title": "Generator diety",
"subtitle": "Oblicz cele z profilu, zbuduj tygodniowy plan z katalogu przepisów i zapisz w planerze.",
"profileTitle": "Twój profil",
"heightCm": "Wzrost (cm)",
"weightKg": "Waga (kg)",
"age": "Wiek",
"sex": "Płeć",
"male": "Mężczyzna",
"female": "Kobieta",
"activity": "Poziom aktywności",
"sedentary": "Siedzący",
"light": "Lekka",
"moderate": "Umiarkowana",
"active": "Aktywna",
"veryActive": "Bardzo aktywna",
"goal": "Cel",
"loseWeight": "Redukcja wagi",
"maintain": "Utrzymanie",
"gainMuscle": "Budowa mięśni",
"recomp": "Rekompozycja",
"allergies": "Alergie / uwagi",
"continue": "Oblicz cele",
"macrosTitle": "Dzienne cele",
"acceptAndGenerate": "Akceptuj i generuj plan 7 dni",
"planHint": "Każdy dzień powinien mieścić się w ±10 kcal od celu. Zablokuj lub wygeneruj ponownie posiłki.",
"lock": "Zablokuj",
"unlock": "Odblokuj",
"viewRecipe": "Szczegóły",
"noAlternativeMeals": "Brak innych przepisów na ten posiłek — wszystkie pasujące opcje są już w planie.",
"commit": "Zapisz plan w kalendarzu",
"done": "Plan zapisany w planerze i celach dziennych.",
"newPlan": "Utwórz kolejny plan",
"error": "Generator diety nie powiódł się."
},
"recipe": {
"title": "Generator przepisów",
"subtitle": "Wygeneruj kilka propozycji przepisów z AI, przejrzyj je i zapisz te, które Ci pasują.",
"constraintsTitle": "Co ugotować?",
"prompt": "Opisz posiłek",
"promptPlaceholder": "Lekkie śniadanie z owsianką i owocami…",
"targetCalories": "Docelowa kaloryczność (kcal)",
"targetCaloriesOptional": "np. 500",
"targetCaloriesHint": "Składniki zostaną dopasowane do tej wartości (±10 kcal).",
"caloriesWithTarget": "{{actual}} kcal (cel: {{target}})",
"maxPrep": "Maks. czas przygotowania (min)",
"exclusions": "Wyklucz składniki",
"generate": "Generuj przepis",
"recipeCount": "Ile przepisów wygenerować",
"reviewHint": "Przejrzyj {{count}} wygenerowanych przepisów. Odznacz lub usuń te, których nie chcesz, i zapisz resztę.",
"selectAll": "Zaznacz wszystkie",
"remove": "Usuń",
"saveSelected": "Zapisz zaznaczone ({{count}})",
"doneMultiple": "Zapisano {{count}} przepisów w bibliotece.",
"generateMore": "Generuj kolejne przepisy",
"regenIngredients": "Generuj składniki ponownie",
"regenSteps": "Generuj kroki ponownie",
"regenFull": "Generuj całość ponownie",
"save": "Zapisz w bibliotece",
"done": "Przepis zapisany.",
"viewRecipe": "Zobacz przepis",
"error": "Generator przepisów nie powiódł się."
}
},
"pdf": {
"generate": "Generuj PDF",
"preparing": "Przygotowywanie...",
"generating": "Generowanie...",
"prepTime": "Czas przygotowania: {{count}} min",
"shoppingList": "Lista zakupów",
"generatedOn_one": "Wygenerowano {{date}} · {{count}} przepis",
"generatedOn_few": "Wygenerowano {{date}} · {{count}} przepisy",
"generatedOn_many": "Wygenerowano {{date}} · {{count}} przepisów",
"generatedOn_other": "Wygenerowano {{date}} · {{count}} przepisów",
"recipesInExport": "Przepisy w tym eksporcie",
"toTaste": "do smaku",
"dayPlanTitle": "Plan posiłków — {{date}}",
"emptySlot": "Nie zaplanowano",
"emptyShoppingList": "Brak składników do zakupu dla tego dnia.",
"plannedMealMeta": "{{slot}} · {{portions}}× porcji",
"dayShoppingSubtitle": "Lista na {{date}} · {{count}} posiłków"
},
"diet": {
"title": "Moja dieta",
"subtitle": "Śledź posiłki i napoje, ustaw cele dzienne i przypomnienia.",
"tabToday": "Dziś",
"tabHistory": "Historia",
"tabGoals": "Cele",
"tabReminders": "Przypomnienia",
"goToday": "Dziś",
"notToday": "inny dzień",
"quickLog": "Szybkie logowanie",
"copyYesterday": "Skopiuj wczorajsze posiłki",
"recentMeals": "Ostatnie",
"favorites": "Ulubione",
"days": "dni",
"historyCalories": "Kalorie w czasie",
"historyMax": "Szczyt: {{max}} kcal",
"noHistory": "Brak historii w tym okresie.",
"mealsOnDate": "Posiłki {{date}}",
"drinksOnDate": "Napoje {{date}}",
"editReminder": "Edytuj przypomnienie",
"calories": "Kalorie",
"water": "Woda",
"snack": "Przekąska",
"logDrink": "Dodaj napój",
"logMeal": "Oznacz zjedzony posiłek",
"searchRecipe": "Z przepisu",
"orCustomMeal": "Lub wpisz własną nazwę posiłku",
"markEaten": "Oznacz jako zjedzone",
"mealsToday": "Posiłki dziś",
"drinksToday": "Napoje dziś",
"nothingLogged": "Nic jeszcze nie zalogowano.",
"noMacros": "Brak danych odżywczych",
"removeEntry": "Usuń wpis",
"dailyGoals": "Cele dzienne",
"goalsHint": "Ustaw cele jak w Lifesum lub MyFitnessPal — zakładka Dziś pokaże, co zostało.",
"calorieGoal": "Cel kalorii (kcal)",
"waterGoal": "Cel wody (ml)",
"saveGoals": "Zapisz cele",
"addReminder": "Dodaj przypomnienie",
"reminderType": "Typ",
"reminderWater": "Pij wodę",
"reminderMeal": "Pora posiłku",
"reminderCustom": "Własne",
"reminderTitle": "Tytuł",
"reminderTitlePlaceholder": "Wypij szklankę wody",
"reminderTime": "Godzina",
"saveReminder": "Zapisz przypomnienie",
"yourReminders": "Twoje przypomnienia",
"noReminders": "Brak przypomnień.",
"remaining": "Pozostało",
"portions": "Porcje",
"fromCatalog": "Z katalogu składników",
"noCatalogItem": "Brak",
"grams": "Ilość (g)",
"mealPreview": "Ten posiłek dodaje",
"remainingAfter": "Po zapisaniu zostanie Ci",
"suggestionsTitle": "Co warto zjeść dalej",
"suggestionsHint": "Na podstawie tego, czego jeszcze brakuje dziś.",
"logSuggestion": "Zapisz",
"suggestionReasons": {
"highProtein": "Dużo białka",
"needCarbs": "Dobre węglowodany",
"needFat": "Zdrowe tłuszcze",
"needCalories": "Energia",
"balanced": "Zbilansowany wybór"
}
},
"mealPlanner": {
"title": "Plan posiłków",
"subtitle": "Planuj przepisy na każdy dzień tygodnia.",
"today": "Ten tydzień",
"addRecipe": "Dodaj przepis",
"dailyTarget": "Cel kalorii na dzień",
"daySummary": "Zaplanowano {{logged}} / {{target}} kcal",
"remaining": "Pozostało {{count}} kcal",
"slotHint": "Sugerowane ~{{count}} kcal na ten posiłek",
"suggestionsTitle": "Propozycje na ten posiłek",
"noSuggestions": "Ustaw cel kalorii na dzień, aby zobaczyć propozycje.",
"estimatedMeal": "Ten posiłek: ~{{count}} kcal",
"selectedRecipe": "Wybrany: {{name}}",
"clearSelection": "Wyczyść wybór",
"exportDay": "Eksportuj plan dnia (PDF)",
"includingSelection": "w tym bieżący wybór: {{count}} kcal"
},
"shoppingList": {
"title": "Lista zakupów",
"subtitle": "Składniki zebrane z planu posiłków.",
"from": "Od",
"to": "Do",
"load": "Załaduj listę",
"clearChecks": "Wyczyść zaznaczenia",
"empty": "Brak pozycji w tym zakresie dat.",
"checklistHint": "Zaznaczenia są zapisywane lokalnie w przeglądarce."
},
"ingredientCatalog": {
"title": "Katalog składników",
"subtitle": "Wartości odżywcze na 100 g, pogrupowane według kategorii.",
"allCategories": "Wszystkie",
"searchPlaceholder": "Szukaj składników…",
"noResultsTitle": "Nie znaleziono składników",
"noResultsDescription": "Spróbuj innej kategorii lub frazy.",
"per100gNote": "Wszystkie wartości dotyczą 100 g.",
"addIngredient": "Dodaj składnik",
"editIngredient": "Edytuj składnik",
"selectCategory": "Wybierz kategorię",
"nameEn": "Nazwa (angielski)",
"namePlLabel": "Nazwa (polski)",
"formInvalid": "Wypełnij kategorię i nazwę.",
"deleteConfirm": "Usunąć ten składnik z katalogu?",
"columns": {
"name": "Składnik",
"category": "Kategoria",
"calories": "kcal",
"protein": "Białko (g)",
"fat": "Tłuszcz (g)",
"carbs": "Węglowodany (g)",
"fiber": "Błonnik (g)"
},
"categories": {
"meat": "Mięso",
"poultry": "Drób",
"fish": "Ryby",
"seafood": "Owoce morza",
"vegetables": "Warzywa",
"fruits": "Owoce",
"dairy": "Nabiał",
"eggs": "Jaja",
"grains": "Zboża",
"legumes": "Rośliny strączkowe",
"nuts": "Orzechy i nasiona",
"oils": "Oleje i tłuszcze"
}
},
"notFound": {
"title": "Nie znaleziono strony",
"description": "Strona, której szukasz, nie istnieje.",
"backToDashboard": "Wróć do panelu"
}
}