feat(frontend): add PL/EN i18n using @inlang/paraglide-js v2

- Install @inlang/paraglide-js v2 with Vite plugin and paraglideMiddleware hook
- Add messages/pl.json and messages/en.json with ~400 translation keys
- Create project.inlang/settings.json (PL as base locale)
- Add LanguageSwitcher component (cookie-based, no URL prefix needed)
- Replace all hardcoded strings across 14 pages/components with m.*() calls
- ProductForm uses derived label maps for all enum types (category, texture, etc.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Piotr Oleszczyk 2026-03-01 13:20:34 +01:00
parent 9524e4df54
commit 99584521a1
22 changed files with 1742 additions and 612 deletions

437
frontend/messages/en.json Normal file
View file

@ -0,0 +1,437 @@
{
"nav_dashboard": "Dashboard",
"nav_products": "Products",
"nav_routines": "Routines",
"nav_grooming": "Grooming",
"nav_medications": "Medications",
"nav_labResults": "Lab Results",
"nav_skin": "Skin",
"nav_appName": "innercontext",
"nav_appSubtitle": "personal health & skincare",
"common_save": "Save",
"common_cancel": "Cancel",
"common_add": "Add",
"common_edit": "Edit",
"common_delete": "Delete",
"common_saved": "Saved.",
"common_select": "Select",
"common_unknown": "Unknown",
"common_yes": "Yes",
"common_no": "No",
"common_unknown_value": "Unknown",
"common_optional_notes": "optional",
"common_steps": "steps",
"dashboard_title": "Dashboard",
"dashboard_subtitle": "Your recent health & skincare overview",
"dashboard_latestSnapshot": "Latest Skin Snapshot",
"dashboard_recentRoutines": "Recent Routines",
"dashboard_noSnapshots": "No skin snapshots yet.",
"dashboard_noRoutines": "No routines in the past 2 weeks.",
"products_title": "Products",
"products_count": "{count} products",
"products_addNew": "+ Add product",
"products_noProducts": "No products found.",
"products_filterAll": "All",
"products_filterOwned": "Owned",
"products_filterUnowned": "Not owned",
"products_colName": "Name",
"products_colBrand": "Brand",
"products_colTargets": "Targets",
"products_colTime": "Time",
"products_newTitle": "New Product",
"products_backToList": "← Products",
"products_createProduct": "Create product",
"products_saveChanges": "Save changes",
"products_deleteProduct": "Delete product",
"products_confirmDelete": "Delete this product?",
"products_noInventory": "No inventory packages.",
"inventory_title": "Inventory packages ({count})",
"inventory_addPackage": "+ Add package",
"inventory_packageAdded": "Package added.",
"inventory_packageUpdated": "Package updated.",
"inventory_packageDeleted": "Package deleted.",
"inventory_alreadyOpened": "Already opened",
"inventory_openedDate": "Opened date",
"inventory_finishedDate": "Finished date",
"inventory_expiryDate": "Expiry date",
"inventory_currentWeight": "Current weight (g)",
"inventory_lastWeighed": "Last weighed",
"inventory_notes": "Notes",
"inventory_badgeOpen": "Open",
"inventory_badgeSealed": "Sealed",
"inventory_badgeFinished": "Finished",
"inventory_exp": "Exp:",
"inventory_opened": "Opened:",
"inventory_finished": "Finished:",
"inventory_remaining": "g remaining",
"inventory_weighed": "Weighed:",
"inventory_confirmDelete": "Delete this package?",
"routines_title": "Routines",
"routines_count": "{count} routines (last 30 days)",
"routines_suggestAI": "Suggest AI routine",
"routines_addNew": "+ New routine",
"routines_noRoutines": "No routines found.",
"routines_newTitle": "New Routine",
"routines_backToList": "← Routines",
"routines_detailsTitle": "Routine details",
"routines_date": "Date *",
"routines_amOrPm": "AM or PM *",
"routines_notes": "Notes",
"routines_notesPlaceholder": "Optional notes",
"routines_createRoutine": "Create routine",
"routines_deleteRoutine": "Delete routine",
"routines_confirmDelete": "Delete this routine?",
"routines_steps": "Steps ({count})",
"routines_addStep": "+ Add step",
"routines_addStepTitle": "Add step",
"routines_product": "Product",
"routines_selectProduct": "Select product",
"routines_dose": "Dose",
"routines_dosePlaceholder": "e.g. 2 pumps",
"routines_region": "Region",
"routines_regionPlaceholder": "e.g. face",
"routines_addStepBtn": "Add step",
"routines_unknownStep": "Unknown step",
"routines_noSteps": "No steps yet.",
"grooming_title": "Grooming Schedule",
"grooming_backToRoutines": "← Routines",
"grooming_addEntry": "+ Add entry",
"grooming_entryAdded": "Entry added.",
"grooming_entryUpdated": "Entry updated.",
"grooming_entryDeleted": "Entry deleted.",
"grooming_dayOfWeek": "Day of week",
"grooming_action": "Action",
"grooming_notesOptional": "Notes (optional)",
"grooming_notesPlaceholder": "e.g. every 2 weeks",
"grooming_noEntries": "No entries yet. Click \"+ Add entry\" to get started.",
"grooming_confirmDelete": "Delete this entry?",
"grooming_actionShavingRazor": "Razor shaving",
"grooming_actionShavingOneblade": "OneBlade shaving",
"grooming_actionDermarolling": "Dermarolling",
"grooming_dayMonday": "Monday",
"grooming_dayTuesday": "Tuesday",
"grooming_dayWednesday": "Wednesday",
"grooming_dayThursday": "Thursday",
"grooming_dayFriday": "Friday",
"grooming_daySaturday": "Saturday",
"grooming_daySunday": "Sunday",
"suggest_title": "AI Routine Suggestion",
"suggest_backToRoutines": "← Routines",
"suggest_singleTab": "Single routine",
"suggest_batchTab": "Batch / Vacation",
"suggest_singleParams": "Parameters",
"suggest_date": "Date",
"suggest_timeOfDay": "Time of day",
"suggest_contextLabel": "Additional context for AI",
"suggest_contextOptional": "(optional)",
"suggest_contextPlaceholder": "e.g. party night, focusing on hydration...",
"suggest_generateBtn": "Generate suggestion",
"suggest_generating": "Generating…",
"suggest_proposalTitle": "Suggestion",
"suggest_saveRoutine": "Save routine",
"suggest_saving": "Saving…",
"suggest_regenerate": "Regenerate",
"suggest_batchRange": "Date range",
"suggest_fromDate": "From",
"suggest_toDate": "To (max 14 days)",
"suggest_batchContextLabel": "Context / trip purpose",
"suggest_batchContextPlaceholder": "e.g. sunny trip to Italy, active mountain vacation...",
"suggest_generatePlan": "Generate plan",
"suggest_generatingPlan": "Generating plan…",
"suggest_planTitle": "Plan ({count} days)",
"suggest_saveAllRoutines": "Save all routines",
"suggest_amSteps": "steps",
"suggest_pmSteps": "steps",
"suggest_noAmSteps": "No AM steps.",
"suggest_noPmSteps": "No PM steps.",
"suggest_errorDefault": "Error generating suggestion.",
"suggest_errorBatch": "Error generating plan.",
"suggest_errorSave": "Error saving.",
"suggest_amMorning": "AM (morning)",
"suggest_pmEvening": "PM (evening)",
"medications_title": "Medications",
"medications_count": "{count} entries",
"medications_addNew": "+ Add medication",
"medications_newTitle": "New medication",
"medications_kind": "Kind",
"medications_productName": "Product name *",
"medications_productNamePlaceholder": "e.g. Vitamin D3",
"medications_activeSubstance": "Active substance",
"medications_activeSubstancePlaceholder": "e.g. cholecalciferol",
"medications_notes": "Notes",
"medications_added": "Medication added.",
"medications_usages": "{count} usages",
"medications_noMedications": "No medications recorded.",
"medications_kindPrescription": "Prescription",
"medications_kindOtc": "OTC",
"medications_kindSupplement": "Supplement",
"medications_kindHerbal": "Herbal",
"medications_kindOther": "Other",
"labResults_title": "Lab Results",
"labResults_count": "{count} results",
"labResults_addNew": "+ Add result",
"labResults_newTitle": "New lab result",
"labResults_flagFilter": "Flag:",
"labResults_flagAll": "All",
"labResults_flagNone": "None",
"labResults_date": "Date *",
"labResults_loincCode": "LOINC code *",
"labResults_testName": "Test name",
"labResults_testNamePlaceholder": "e.g. Hemoglobin",
"labResults_lab": "Lab",
"labResults_labPlaceholder": "e.g. LabCorp",
"labResults_value": "Value",
"labResults_unit": "Unit",
"labResults_unitPlaceholder": "e.g. g/dL",
"labResults_flag": "Flag",
"labResults_added": "Result added.",
"labResults_colDate": "Date",
"labResults_colTest": "Test",
"labResults_colLoinc": "LOINC",
"labResults_colValue": "Value",
"labResults_colFlag": "Flag",
"labResults_colLab": "Lab",
"labResults_noResults": "No lab results found.",
"skin_title": "Skin Snapshots",
"skin_count": "{count} snapshots",
"skin_addNew": "+ Add snapshot",
"skin_aiAnalysisTitle": "AI analysis from photos",
"skin_aiUploadText": "Upload 13 photos of your skin. AI will pre-fill the form fields below.",
"skin_analyzePhotos": "Analyze photos",
"skin_analyzing": "Analyzing…",
"skin_newSnapshotTitle": "New skin snapshot",
"skin_date": "Date *",
"skin_overallState": "Overall state",
"skin_texture": "Texture",
"skin_skinType": "Skin type",
"skin_barrierState": "Barrier state",
"skin_hydration": "Hydration (15)",
"skin_sensitivity": "Sensitivity (15)",
"skin_sebumTzone": "Sebum T-zone (15)",
"skin_sebumCheeks": "Sebum cheeks (15)",
"skin_activeConcerns": "Active concerns (comma-separated)",
"skin_activeConcernsPlaceholder": "acne, redness, dehydration",
"skin_notes": "Notes",
"skin_addSnapshot": "Add snapshot",
"skin_snapshotAdded": "Snapshot added.",
"skin_snapshotUpdated": "Snapshot updated.",
"skin_snapshotDeleted": "Snapshot deleted.",
"skin_noSnapshots": "No skin snapshots yet.",
"skin_hydrationLabel": "Hydration",
"skin_sensitivityLabel": "Sensitivity",
"skin_barrierLabel": "Barrier",
"skin_stateExcellent": "excellent",
"skin_stateGood": "good",
"skin_stateFair": "fair",
"skin_statePoor": "poor",
"skin_textureSmooth": "smooth",
"skin_textureRough": "rough",
"skin_textureFlaky": "flaky",
"skin_textureBumpy": "bumpy",
"skin_barrierIntact": "intact",
"skin_barrierMildly": "mildly compromised",
"skin_barrierCompromised": "compromised",
"skin_typeDry": "dry",
"skin_typeOily": "oily",
"skin_typeCombination": "combination",
"skin_typeSensitive": "sensitive",
"skin_typeNormal": "normal",
"skin_typeAcneProne": "acne prone",
"productForm_aiPrefill": "AI pre-fill",
"productForm_aiPrefillText": "Paste product description from a website, ingredient list, or other text. AI will fill in available fields — you can review and correct before saving.",
"productForm_pasteText": "Paste product description, INCI ingredients here...",
"productForm_parseWithAI": "Fill fields (AI)",
"productForm_parsing": "Processing…",
"productForm_basicInfo": "Basic info",
"productForm_name": "Name *",
"productForm_namePlaceholder": "e.g. Hydro Boost Water Gel",
"productForm_brand": "Brand *",
"productForm_brandPlaceholder": "e.g. Neutrogena",
"productForm_lineName": "Line / series",
"productForm_lineNamePlaceholder": "e.g. Hydro Boost",
"productForm_url": "URL",
"productForm_sku": "SKU",
"productForm_skuPlaceholder": "e.g. NTR-HB-50",
"productForm_barcode": "Barcode / EAN",
"productForm_barcodePlaceholder": "e.g. 3614273258975",
"productForm_classification": "Classification",
"productForm_category": "Category *",
"productForm_selectCategory": "Select category",
"productForm_time": "Time *",
"productForm_timeOptions": "AM / PM / Both",
"productForm_timeBoth": "Both",
"productForm_leaveOn": "Leave-on *",
"productForm_leaveOnYes": "Yes (leave-on)",
"productForm_leaveOnNo": "No (rinse-off)",
"productForm_texture": "Texture",
"productForm_selectTexture": "Select texture",
"productForm_absorptionSpeed": "Absorption speed",
"productForm_selectSpeed": "Select speed",
"productForm_skinProfile": "Skin profile",
"productForm_recommendedFor": "Recommended for skin types",
"productForm_targetConcerns": "Target concerns",
"productForm_contraindications": "Contraindications (one per line)",
"productForm_contraindicationsPlaceholder": "e.g. active rosacea flares",
"productForm_ingredients": "Ingredients",
"productForm_inciList": "INCI list (one ingredient per line)",
"productForm_activeIngredients": "Active ingredients",
"productForm_addActive": "+ Add active",
"productForm_noActives": "No actives added yet.",
"productForm_activeName": "Name",
"productForm_activePercent": "%",
"productForm_activeStrength": "Strength",
"productForm_activeIrritation": "Irritation",
"productForm_activeFunctions": "Functions",
"productForm_effectProfile": "Effect profile (05)",
"productForm_interactions": "Interactions",
"productForm_synergizesWith": "Synergizes with (one per line)",
"productForm_incompatibleWith": "Incompatible with",
"productForm_addIncompatibility": "+ Add incompatibility",
"productForm_noIncompatibilities": "No incompatibilities added.",
"productForm_incompTarget": "Target ingredient",
"productForm_incompScope": "Scope",
"productForm_incompReason": "Reason (optional)",
"productForm_incompReasonPlaceholder": "e.g. reduces efficacy",
"productForm_incompScopeSelect": "Select…",
"productForm_contextRules": "Context rules",
"productForm_ctxAfterShaving": "Safe after shaving",
"productForm_ctxAfterAcids": "Safe after acids",
"productForm_ctxAfterRetinoids": "Safe after retinoids",
"productForm_ctxCompromisedBarrier": "Safe with compromised barrier",
"productForm_ctxLowUvOnly": "Low UV only (evening/covered)",
"productForm_productDetails": "Product details",
"productForm_priceTier": "Price tier",
"productForm_selectTier": "Select tier",
"productForm_sizeMl": "Size (ml)",
"productForm_fullWeightG": "Full weight (g)",
"productForm_emptyWeightG": "Empty weight (g)",
"productForm_paoMonths": "PAO (months)",
"productForm_phMin": "pH min",
"productForm_phMax": "pH max",
"productForm_usageNotes": "Usage notes",
"productForm_usageNotesPlaceholder": "e.g. Apply to damp skin, avoid eye area",
"productForm_safetyFlags": "Safety flags",
"productForm_fragranceFree": "Fragrance-free",
"productForm_essentialOilsFree": "Essential oils-free",
"productForm_alcoholDenatFree": "Alcohol denat-free",
"productForm_pregnancySafe": "Pregnancy safe",
"productForm_usageConstraints": "Usage constraints",
"productForm_minIntervalHours": "Min interval (hours)",
"productForm_maxFrequencyPerWeek": "Max uses per week",
"productForm_isMedication": "Is medication",
"productForm_isTool": "Is tool (e.g. dermaroller)",
"productForm_needleLengthMm": "Needle length (mm, tools only)",
"productForm_personalNotes": "Personal notes",
"productForm_repurchaseIntent": "Repurchase intent",
"productForm_toleranceNotes": "Tolerance notes",
"productForm_toleranceNotesPlaceholder": "e.g. Causes mild stinging, fine after 2 weeks",
"productForm_categoryCleanser": "Cleanser",
"productForm_categoryToner": "Toner",
"productForm_categoryEssence": "Essence",
"productForm_categorySerum": "Serum",
"productForm_categoryMoisturizer": "Moisturizer",
"productForm_categorySpf": "SPF",
"productForm_categoryMask": "Mask",
"productForm_categoryExfoliant": "Exfoliant",
"productForm_categoryHairTreatment": "Hair treatment",
"productForm_categoryTool": "Tool",
"productForm_categorySpotTreatment": "Spot treatment",
"productForm_categoryOil": "Oil",
"productForm_textureWatery": "Watery",
"productForm_textureGel": "Gel",
"productForm_textureEmulsion": "Emulsion",
"productForm_textureCream": "Cream",
"productForm_textureOil": "Oil",
"productForm_textureBalm": "Balm",
"productForm_textureFoam": "Foam",
"productForm_textureFluid": "Fluid",
"productForm_absorptionVeryFast": "Very fast",
"productForm_absorptionFast": "Fast",
"productForm_absorptionModerate": "Moderate",
"productForm_absorptionSlow": "Slow",
"productForm_absorptionVerySlow": "Very slow",
"productForm_priceBudget": "Budget",
"productForm_priceMid": "Mid",
"productForm_pricePremium": "Premium",
"productForm_priceLuxury": "Luxury",
"productForm_skinTypeDry": "dry",
"productForm_skinTypeOily": "oily",
"productForm_skinTypeCombination": "combination",
"productForm_skinTypeSensitive": "sensitive",
"productForm_skinTypeNormal": "normal",
"productForm_skinTypeAcneProne": "acne prone",
"productForm_concernAcne": "acne",
"productForm_concernRosacea": "rosacea",
"productForm_concernHyperpigmentation": "hyperpigmentation",
"productForm_concernAging": "aging",
"productForm_concernDehydration": "dehydration",
"productForm_concernRedness": "redness",
"productForm_concernDamagedBarrier": "damaged barrier",
"productForm_concernPoreVisibility": "pore visibility",
"productForm_concernUnevenTexture": "uneven texture",
"productForm_concernHairGrowth": "hair growth",
"productForm_concernSebumExcess": "sebum excess",
"productForm_fnHumectant": "humectant",
"productForm_fnEmollient": "emollient",
"productForm_fnOcclusive": "occlusive",
"productForm_fnExfoliantAha": "AHA exfoliant",
"productForm_fnExfoliantBha": "BHA exfoliant",
"productForm_fnExfoliantPha": "PHA exfoliant",
"productForm_fnRetinoid": "retinoid",
"productForm_fnAntioxidant": "antioxidant",
"productForm_fnSoothing": "soothing",
"productForm_fnBarrierSupport": "barrier support",
"productForm_fnBrightening": "brightening",
"productForm_fnAntiAcne": "anti-acne",
"productForm_fnCeramide": "ceramide",
"productForm_fnNiacinamide": "niacinamide",
"productForm_fnSunscreen": "sunscreen",
"productForm_fnPeptide": "peptide",
"productForm_fnHairGrowth": "hair growth stimulant",
"productForm_fnPrebiotic": "prebiotic",
"productForm_fnVitaminC": "vitamin C",
"productForm_fnAntiAging": "anti-aging",
"productForm_scopeSameStep": "same step",
"productForm_scopeSameDay": "same day",
"productForm_scopeSamePeriod": "same period",
"productForm_strengthLow": "1 Low",
"productForm_strengthMedium": "2 Medium",
"productForm_strengthHigh": "3 High",
"productForm_effectHydrationImmediate": "Hydration (immediate)",
"productForm_effectHydrationLongTerm": "Hydration (long term)",
"productForm_effectBarrierRepair": "Barrier repair",
"productForm_effectSoothing": "Soothing",
"productForm_effectExfoliation": "Exfoliation",
"productForm_effectRetinoid": "Retinoid activity",
"productForm_effectIrritation": "Irritation risk",
"productForm_effectComedogenic": "Comedogenic risk",
"productForm_effectBarrierDisruption": "Barrier disruption risk",
"productForm_effectDryness": "Dryness risk",
"productForm_effectBrightening": "Brightening",
"productForm_effectAntiAcne": "Anti-acne",
"productForm_effectAntiAging": "Anti-aging",
"lang_pl": "PL",
"lang_en": "EN"
}

437
frontend/messages/pl.json Normal file
View file

@ -0,0 +1,437 @@
{
"nav_dashboard": "Dashboard",
"nav_products": "Produkty",
"nav_routines": "Rutyny",
"nav_grooming": "Pielęgnacja",
"nav_medications": "Leki",
"nav_labResults": "Wyniki badań",
"nav_skin": "Skóra",
"nav_appName": "innercontext",
"nav_appSubtitle": "zdrowie & pielęgnacja",
"common_save": "Zapisz",
"common_cancel": "Anuluj",
"common_add": "Dodaj",
"common_edit": "Edytuj",
"common_delete": "Usuń",
"common_saved": "Zapisano.",
"common_select": "Wybierz",
"common_unknown": "Nieznane",
"common_yes": "Tak",
"common_no": "Nie",
"common_unknown_value": "Nieznane",
"common_optional_notes": "opcjonalnie",
"common_steps": "kroków",
"dashboard_title": "Dashboard",
"dashboard_subtitle": "Przegląd zdrowia i pielęgnacji",
"dashboard_latestSnapshot": "Ostatni stan skóry",
"dashboard_recentRoutines": "Ostatnie rutyny",
"dashboard_noSnapshots": "Brak wpisów o stanie skóry.",
"dashboard_noRoutines": "Brak rutyno w ciągu ostatnich 2 tygodni.",
"products_title": "Produkty",
"products_count": "{count} produktów",
"products_addNew": "+ Dodaj produkt",
"products_noProducts": "Nie znaleziono produktów.",
"products_filterAll": "Wszystkie",
"products_filterOwned": "Posiadane",
"products_filterUnowned": "Nieposiadane",
"products_colName": "Nazwa",
"products_colBrand": "Marka",
"products_colTargets": "Cele",
"products_colTime": "Pora",
"products_newTitle": "Nowy produkt",
"products_backToList": "← Produkty",
"products_createProduct": "Utwórz produkt",
"products_saveChanges": "Zapisz zmiany",
"products_deleteProduct": "Usuń produkt",
"products_confirmDelete": "Usunąć ten produkt?",
"products_noInventory": "Brak opakowań w magazynie.",
"inventory_title": "Opakowania ({count})",
"inventory_addPackage": "+ Dodaj opakowanie",
"inventory_packageAdded": "Opakowanie dodane.",
"inventory_packageUpdated": "Opakowanie zaktualizowane.",
"inventory_packageDeleted": "Opakowanie usunięte.",
"inventory_alreadyOpened": "Już otwarte",
"inventory_openedDate": "Data otwarcia",
"inventory_finishedDate": "Data skończenia",
"inventory_expiryDate": "Data ważności",
"inventory_currentWeight": "Aktualna waga (g)",
"inventory_lastWeighed": "Ostatnie ważenie",
"inventory_notes": "Notatki",
"inventory_badgeOpen": "Otwarte",
"inventory_badgeSealed": "Zamknięte",
"inventory_badgeFinished": "Skończone",
"inventory_exp": "Wazność:",
"inventory_opened": "Otwarto:",
"inventory_finished": "Skończono:",
"inventory_remaining": "g pozostało",
"inventory_weighed": "Ważono:",
"inventory_confirmDelete": "Usunąć to opakowanie?",
"routines_title": "Rutyny",
"routines_count": "{count} rutyno (ostatnie 30 dni)",
"routines_suggestAI": "Zaproponuj rutynę AI",
"routines_addNew": "+ Nowa rutyna",
"routines_noRoutines": "Nie znaleziono rutyno.",
"routines_newTitle": "Nowa rutyna",
"routines_backToList": "← Rutyny",
"routines_detailsTitle": "Szczegóły rutyny",
"routines_date": "Data *",
"routines_amOrPm": "AM lub PM *",
"routines_notes": "Notatki",
"routines_notesPlaceholder": "Opcjonalne notatki",
"routines_createRoutine": "Utwórz rutynę",
"routines_deleteRoutine": "Usuń rutynę",
"routines_confirmDelete": "Usunąć tę rutynę?",
"routines_steps": "Kroki ({count})",
"routines_addStep": "+ Dodaj krok",
"routines_addStepTitle": "Dodaj krok",
"routines_product": "Produkt",
"routines_selectProduct": "Wybierz produkt",
"routines_dose": "Dawka",
"routines_dosePlaceholder": "np. 2 pompki",
"routines_region": "Okolica",
"routines_regionPlaceholder": "np. twarz",
"routines_addStepBtn": "Dodaj krok",
"routines_unknownStep": "Nieznany krok",
"routines_noSteps": "Brak kroków.",
"grooming_title": "Harmonogram pielęgnacji",
"grooming_backToRoutines": "← Rutyny",
"grooming_addEntry": "+ Dodaj wpis",
"grooming_entryAdded": "Wpis dodany.",
"grooming_entryUpdated": "Wpis zaktualizowany.",
"grooming_entryDeleted": "Wpis usunięty.",
"grooming_dayOfWeek": "Dzień tygodnia",
"grooming_action": "Czynność",
"grooming_notesOptional": "Notatki (opcjonalnie)",
"grooming_notesPlaceholder": "np. co 2 tygodnie",
"grooming_noEntries": "Brak wpisów. Kliknij \"+ Dodaj wpis\", aby zacząć.",
"grooming_confirmDelete": "Usunąć ten wpis?",
"grooming_actionShavingRazor": "Golenie maszynką",
"grooming_actionShavingOneblade": "Golenie OneBlade",
"grooming_actionDermarolling": "Dermarolling",
"grooming_dayMonday": "Poniedziałek",
"grooming_dayTuesday": "Wtorek",
"grooming_dayWednesday": "Środa",
"grooming_dayThursday": "Czwartek",
"grooming_dayFriday": "Piątek",
"grooming_daySaturday": "Sobota",
"grooming_daySunday": "Niedziela",
"suggest_title": "Propozycja rutyny AI",
"suggest_backToRoutines": "← Rutyny",
"suggest_singleTab": "Jedna rutyna",
"suggest_batchTab": "Batch / Urlop",
"suggest_singleParams": "Parametry",
"suggest_date": "Data",
"suggest_timeOfDay": "Pora dnia",
"suggest_contextLabel": "Dodatkowy kontekst dla AI",
"suggest_contextOptional": "(opcjonalny)",
"suggest_contextPlaceholder": "np. wieczór imprezowy, skupiam się na nawilżeniu...",
"suggest_generateBtn": "Generuj propozycję",
"suggest_generating": "Generuję…",
"suggest_proposalTitle": "Propozycja",
"suggest_saveRoutine": "Zapisz rutynę",
"suggest_saving": "Zapisuję…",
"suggest_regenerate": "Wygeneruj ponownie",
"suggest_batchRange": "Zakres dat",
"suggest_fromDate": "Od",
"suggest_toDate": "Do (max 14 dni)",
"suggest_batchContextLabel": "Kontekst / cel wyjazdu",
"suggest_batchContextPlaceholder": "np. słoneczna podróż do Włoch, aktywny urlop górski...",
"suggest_generatePlan": "Generuj plan",
"suggest_generatingPlan": "Generuję plan…",
"suggest_planTitle": "Plan ({count} dni)",
"suggest_saveAllRoutines": "Zapisz wszystkie rutyny",
"suggest_amSteps": "kroków",
"suggest_pmSteps": "kroków",
"suggest_noAmSteps": "Brak kroków AM.",
"suggest_noPmSteps": "Brak kroków PM.",
"suggest_errorDefault": "Błąd podczas generowania.",
"suggest_errorBatch": "Błąd podczas generowania planu.",
"suggest_errorSave": "Błąd podczas zapisywania.",
"suggest_amMorning": "AM (rano)",
"suggest_pmEvening": "PM (wieczór)",
"medications_title": "Leki",
"medications_count": "{count} wpisów",
"medications_addNew": "+ Dodaj lek",
"medications_newTitle": "Nowy lek",
"medications_kind": "Rodzaj",
"medications_productName": "Nazwa produktu *",
"medications_productNamePlaceholder": "np. Witamina D3",
"medications_activeSubstance": "Substancja czynna",
"medications_activeSubstancePlaceholder": "np. cholekalcyferol",
"medications_notes": "Notatki",
"medications_added": "Lek dodany.",
"medications_usages": "{count} użyć",
"medications_noMedications": "Brak leków.",
"medications_kindPrescription": "Na receptę",
"medications_kindOtc": "OTC (bez recepty)",
"medications_kindSupplement": "Suplement",
"medications_kindHerbal": "Zioła",
"medications_kindOther": "Inne",
"labResults_title": "Wyniki badań",
"labResults_count": "{count} wyników",
"labResults_addNew": "+ Dodaj wynik",
"labResults_newTitle": "Nowy wynik badania",
"labResults_flagFilter": "Flaga:",
"labResults_flagAll": "Wszystkie",
"labResults_flagNone": "Brak",
"labResults_date": "Data *",
"labResults_loincCode": "Kod LOINC *",
"labResults_testName": "Nazwa badania",
"labResults_testNamePlaceholder": "np. Hemoglobina",
"labResults_lab": "Laboratorium",
"labResults_labPlaceholder": "np. LabCorp",
"labResults_value": "Wartość",
"labResults_unit": "Jednostka",
"labResults_unitPlaceholder": "np. g/dL",
"labResults_flag": "Flaga",
"labResults_added": "Wynik dodany.",
"labResults_colDate": "Data",
"labResults_colTest": "Badanie",
"labResults_colLoinc": "LOINC",
"labResults_colValue": "Wartość",
"labResults_colFlag": "Flaga",
"labResults_colLab": "Lab",
"labResults_noResults": "Nie znaleziono wyników badań.",
"skin_title": "Stan skóry",
"skin_count": "{count} wpisów",
"skin_addNew": "+ Dodaj wpis",
"skin_aiAnalysisTitle": "Analiza AI ze zdjęć",
"skin_aiUploadText": "Prześlij 13 zdjęcia skóry. AI wypełni pola formularza poniżej.",
"skin_analyzePhotos": "Analizuj zdjęcia",
"skin_analyzing": "Analizuję…",
"skin_newSnapshotTitle": "Nowy wpis",
"skin_date": "Data *",
"skin_overallState": "Ogólny stan",
"skin_texture": "Tekstura",
"skin_skinType": "Typ skóry",
"skin_barrierState": "Stan bariery",
"skin_hydration": "Nawilżenie (15)",
"skin_sensitivity": "Wrażliwość (15)",
"skin_sebumTzone": "Sebum T-zone (15)",
"skin_sebumCheeks": "Sebum policzki (15)",
"skin_activeConcerns": "Aktywne problemy (przecinek)",
"skin_activeConcernsPlaceholder": "trądzik, zaczerwienienie, odwodnienie",
"skin_notes": "Notatki",
"skin_addSnapshot": "Dodaj wpis",
"skin_snapshotAdded": "Wpis dodany.",
"skin_snapshotUpdated": "Wpis zaktualizowany.",
"skin_snapshotDeleted": "Wpis usunięty.",
"skin_noSnapshots": "Brak wpisów o stanie skóry.",
"skin_hydrationLabel": "Nawilżenie",
"skin_sensitivityLabel": "Wrażliwość",
"skin_barrierLabel": "Bariera",
"skin_stateExcellent": "doskonały",
"skin_stateGood": "dobry",
"skin_stateFair": "przeciętny",
"skin_statePoor": "zły",
"skin_textureSmooth": "gładka",
"skin_textureRough": "szorstka",
"skin_textureFlaky": "łuszcząca się",
"skin_textureBumpy": "nierówna",
"skin_barrierIntact": "nienaruszona",
"skin_barrierMildly": "lekko naruszona",
"skin_barrierCompromised": "naruszona",
"skin_typeDry": "sucha",
"skin_typeOily": "tłusta",
"skin_typeCombination": "mieszana",
"skin_typeSensitive": "wrażliwa",
"skin_typeNormal": "normalna",
"skin_typeAcneProne": "trądzikowa",
"productForm_aiPrefill": "Uzupełnienie AI",
"productForm_aiPrefillText": "Wklej opis produktu ze strony, listę składników lub inny tekst. AI uzupełni dostępne pola — możesz je przejrzeć i poprawić przed zapisem.",
"productForm_pasteText": "Wklej tutaj opis produktu, składniki INCI...",
"productForm_parseWithAI": "Uzupełnij pola (AI)",
"productForm_parsing": "Przetwarzam…",
"productForm_basicInfo": "Informacje podstawowe",
"productForm_name": "Nazwa *",
"productForm_namePlaceholder": "np. Hydro Boost Water Gel",
"productForm_brand": "Marka *",
"productForm_brandPlaceholder": "np. Neutrogena",
"productForm_lineName": "Linia / seria",
"productForm_lineNamePlaceholder": "np. Hydro Boost",
"productForm_url": "URL",
"productForm_sku": "SKU",
"productForm_skuPlaceholder": "np. NTR-HB-50",
"productForm_barcode": "Kod kreskowy / EAN",
"productForm_barcodePlaceholder": "np. 3614273258975",
"productForm_classification": "Klasyfikacja",
"productForm_category": "Kategoria *",
"productForm_selectCategory": "Wybierz kategorię",
"productForm_time": "Pora *",
"productForm_timeOptions": "AM / PM / Oba",
"productForm_timeBoth": "Oba",
"productForm_leaveOn": "Leave-on *",
"productForm_leaveOnYes": "Tak (leave-on)",
"productForm_leaveOnNo": "Nie (rinse-off)",
"productForm_texture": "Tekstura",
"productForm_selectTexture": "Wybierz teksturę",
"productForm_absorptionSpeed": "Szybkość wchłaniania",
"productForm_selectSpeed": "Wybierz szybkość",
"productForm_skinProfile": "Profil skóry",
"productForm_recommendedFor": "Polecane dla typów skóry",
"productForm_targetConcerns": "Problemy docelowe",
"productForm_contraindications": "Przeciwwskazania (jedno na linię)",
"productForm_contraindicationsPlaceholder": "np. aktywna rosacea",
"productForm_ingredients": "Składniki",
"productForm_inciList": "Lista INCI (jeden składnik na linię)",
"productForm_activeIngredients": "Składniki aktywne",
"productForm_addActive": "+ Dodaj aktywny",
"productForm_noActives": "Brak składników aktywnych.",
"productForm_activeName": "Nazwa",
"productForm_activePercent": "%",
"productForm_activeStrength": "Siła",
"productForm_activeIrritation": "Podrażnienie",
"productForm_activeFunctions": "Funkcje",
"productForm_effectProfile": "Profil działania (05)",
"productForm_interactions": "Interakcje",
"productForm_synergizesWith": "Synergizuje z (jedno na linię)",
"productForm_incompatibleWith": "Niekompatybilny z",
"productForm_addIncompatibility": "+ Dodaj niekompatybilność",
"productForm_noIncompatibilities": "Brak niekompatybilności.",
"productForm_incompTarget": "Składnik docelowy",
"productForm_incompScope": "Zakres",
"productForm_incompReason": "Powód (opcjonalny)",
"productForm_incompReasonPlaceholder": "np. zmniejsza skuteczność",
"productForm_incompScopeSelect": "Wybierz…",
"productForm_contextRules": "Reguły kontekstu",
"productForm_ctxAfterShaving": "Bezpieczny po goleniu",
"productForm_ctxAfterAcids": "Bezpieczny po kwasach",
"productForm_ctxAfterRetinoids": "Bezpieczny po retinoidach",
"productForm_ctxCompromisedBarrier": "Bezpieczny przy naruszonej barierze",
"productForm_ctxLowUvOnly": "Tylko przy niskim UV (wieczór/zakrycie)",
"productForm_productDetails": "Szczegóły produktu",
"productForm_priceTier": "Przedział cenowy",
"productForm_selectTier": "Wybierz przedział",
"productForm_sizeMl": "Rozmiar (ml)",
"productForm_fullWeightG": "Waga pełna (g)",
"productForm_emptyWeightG": "Waga pustego (g)",
"productForm_paoMonths": "PAO (miesiące)",
"productForm_phMin": "pH min",
"productForm_phMax": "pH max",
"productForm_usageNotes": "Notatki o stosowaniu",
"productForm_usageNotesPlaceholder": "np. Nakładaj na wilgotną skórę, unikaj okolic oczu",
"productForm_safetyFlags": "Flagi bezpieczeństwa",
"productForm_fragranceFree": "Bez zapachów",
"productForm_essentialOilsFree": "Bez olejków eterycznych",
"productForm_alcoholDenatFree": "Bez alkoholu denat.",
"productForm_pregnancySafe": "Bezpieczny w ciąży",
"productForm_usageConstraints": "Ograniczenia stosowania",
"productForm_minIntervalHours": "Min. przerwa (godziny)",
"productForm_maxFrequencyPerWeek": "Max użyć na tydzień",
"productForm_isMedication": "To lek",
"productForm_isTool": "To narzędzie (np. dermaroller)",
"productForm_needleLengthMm": "Długość igły (mm, tylko narzędzia)",
"productForm_personalNotes": "Notatki osobiste",
"productForm_repurchaseIntent": "Zamiar ponownego zakupu",
"productForm_toleranceNotes": "Notatki o tolerancji",
"productForm_toleranceNotesPlaceholder": "np. Lekkie pieczenie, ustępuje po 2 tygodniach",
"productForm_categoryCleanser": "Żel/pianka do mycia",
"productForm_categoryToner": "Tonik",
"productForm_categoryEssence": "Esencja",
"productForm_categorySerum": "Serum",
"productForm_categoryMoisturizer": "Krem",
"productForm_categorySpf": "SPF",
"productForm_categoryMask": "Maska",
"productForm_categoryExfoliant": "Peeling",
"productForm_categoryHairTreatment": "Pielęgnacja włosów",
"productForm_categoryTool": "Narzędzie",
"productForm_categorySpotTreatment": "Punkt leczenia",
"productForm_categoryOil": "Olejek",
"productForm_textureWatery": "Wodnista",
"productForm_textureGel": "Żel",
"productForm_textureEmulsion": "Emulsja",
"productForm_textureCream": "Krem",
"productForm_textureOil": "Olejek",
"productForm_textureBalm": "Balsam",
"productForm_textureFoam": "Pianka",
"productForm_textureFluid": "Fluid",
"productForm_absorptionVeryFast": "Bardzo szybkie",
"productForm_absorptionFast": "Szybkie",
"productForm_absorptionModerate": "Umiarkowane",
"productForm_absorptionSlow": "Wolne",
"productForm_absorptionVerySlow": "Bardzo wolne",
"productForm_priceBudget": "Budżetowy",
"productForm_priceMid": "Średni",
"productForm_pricePremium": "Premium",
"productForm_priceLuxury": "Luksusowy",
"productForm_skinTypeDry": "sucha",
"productForm_skinTypeOily": "tłusta",
"productForm_skinTypeCombination": "mieszana",
"productForm_skinTypeSensitive": "wrażliwa",
"productForm_skinTypeNormal": "normalna",
"productForm_skinTypeAcneProne": "trądzikowa",
"productForm_concernAcne": "trądzik",
"productForm_concernRosacea": "rosacea",
"productForm_concernHyperpigmentation": "przebarwienia",
"productForm_concernAging": "starzenie",
"productForm_concernDehydration": "odwodnienie",
"productForm_concernRedness": "zaczerwienienie",
"productForm_concernDamagedBarrier": "naruszona bariera",
"productForm_concernPoreVisibility": "widoczność porów",
"productForm_concernUnevenTexture": "nierówna tekstura",
"productForm_concernHairGrowth": "wzrost włosów",
"productForm_concernSebumExcess": "nadmiar sebum",
"productForm_fnHumectant": "humektant",
"productForm_fnEmollient": "emolient",
"productForm_fnOcclusive": "okluzja",
"productForm_fnExfoliantAha": "peeling AHA",
"productForm_fnExfoliantBha": "peeling BHA",
"productForm_fnExfoliantPha": "peeling PHA",
"productForm_fnRetinoid": "retinoid",
"productForm_fnAntioxidant": "antyoksydant",
"productForm_fnSoothing": "łagodzący",
"productForm_fnBarrierSupport": "wsparcie bariery",
"productForm_fnBrightening": "rozjaśniający",
"productForm_fnAntiAcne": "przeciwtrądzikowy",
"productForm_fnCeramide": "ceramid",
"productForm_fnNiacinamide": "niacynamid",
"productForm_fnSunscreen": "filtr UV",
"productForm_fnPeptide": "peptyd",
"productForm_fnHairGrowth": "stymulator wzrostu włosów",
"productForm_fnPrebiotic": "prebiotyk",
"productForm_fnVitaminC": "witamina C",
"productForm_fnAntiAging": "przeciwstarzeniowy",
"productForm_scopeSameStep": "ten sam krok",
"productForm_scopeSameDay": "ten sam dzień",
"productForm_scopeSamePeriod": "ten sam okres",
"productForm_strengthLow": "1 Niskie",
"productForm_strengthMedium": "2 Średnie",
"productForm_strengthHigh": "3 Wysokie",
"productForm_effectHydrationImmediate": "Nawilżenie (natychmiastowe)",
"productForm_effectHydrationLongTerm": "Nawilżenie (długoterminowe)",
"productForm_effectBarrierRepair": "Naprawa bariery",
"productForm_effectSoothing": "Łagodzenie",
"productForm_effectExfoliation": "Złuszczanie",
"productForm_effectRetinoid": "Aktywność retinoidu",
"productForm_effectIrritation": "Ryzyko podrażnienia",
"productForm_effectComedogenic": "Ryzyko komedogenności",
"productForm_effectBarrierDisruption": "Ryzyko naruszenia bariery",
"productForm_effectDryness": "Ryzyko przesuszenia",
"productForm_effectBrightening": "Rozjaśnienie",
"productForm_effectAntiAcne": "Działanie przeciwtrądzikowe",
"productForm_effectAntiAging": "Działanie przeciwstarzeniowe",
"lang_pl": "PL",
"lang_en": "EN"
}