Add traslations

This commit is contained in:
Urtzi Alfaro
2025-12-25 18:35:37 +01:00
parent 82567b8701
commit b95b86ee2c
18 changed files with 516 additions and 52 deletions

View File

@@ -3,12 +3,20 @@
"title": "Initial Setup",
"subtitle": "We'll guide you step by step to configure your bakery",
"steps": {
"bakery_type": {
"title": "Bakery Type",
"description": "Select your business type"
},
"setup": {
"title": "Register Bakery",
"title_enterprise": "Register Central Bakery",
"description": "Configure your bakery's basic information",
"description_enterprise": "Central bakery information"
},
"child_tenants": {
"title": "Configure Branches",
"description": "Register the branches of your enterprise network"
},
"poi_detection": {
"title": "Location Analysis",
"description": "Detect nearby points of interest"
@@ -17,6 +25,34 @@
"title": "Configure Inventory",
"description": "Upload sales data and set up your initial inventory"
},
"upload_sales": {
"title": "Upload Sales Data",
"description": "Load file with sales history"
},
"inventory_review": {
"title": "Review Inventory",
"description": "Confirm detected products"
},
"stock": {
"title": "Stock Levels",
"description": "Initial quantities"
},
"suppliers": {
"title": "Suppliers",
"description": "Configure your suppliers"
},
"recipes": {
"title": "Recipes",
"description": "Production recipes"
},
"quality": {
"title": "Quality",
"description": "Quality standards"
},
"team": {
"title": "Team",
"description": "Team members"
},
"ml_training": {
"title": "AI Training",
"description": "Train your personalized artificial intelligence model"
@@ -180,6 +216,54 @@
}
}
},
"bakery_type": {
"title": "What type of bakery do you have?",
"subtitle": "This will help us personalize the experience and show you only the features you need",
"features_label": "Features",
"examples_label": "Examples",
"continue_button": "Continue",
"help_text": "💡 Don't worry, you can always change this later in settings",
"selected_info_title": "Perfect for your bakery",
"production": {
"name": "Production Bakery",
"description": "We produce from scratch using basic ingredients",
"feature1": "Complete recipe management",
"feature2": "Ingredient and cost control",
"feature3": "Production planning",
"feature4": "Raw material quality control",
"example1": "Artisan bread",
"example2": "Pastries",
"example3": "Confectionery",
"example4": "Patisserie",
"selected_info": "We'll set up a complete recipe, ingredient, and production management system tailored to your workflow."
},
"retail": {
"name": "Retail Bakery",
"description": "We bake and sell pre-made products",
"feature1": "Finished product control",
"feature2": "Simple baking management",
"feature3": "Point of sale inventory control",
"feature4": "Sales and shrinkage tracking",
"example1": "Pre-baked bread",
"example2": "Frozen products to finish",
"example3": "Ready-to-sell pastries",
"example4": "Cakes and pastries from suppliers",
"selected_info": "We'll set up a simple system focused on inventory control, baking, and sales without the complexity of recipes."
},
"mixed": {
"name": "Mixed Bakery",
"description": "We combine own production with finished products",
"feature1": "Own recipes and external products",
"feature2": "Total management flexibility",
"feature3": "Complete cost control",
"feature4": "Maximum adaptability",
"example1": "Own bread + supplier pastries",
"example2": "Own cakes + pre-baked goods",
"example3": "Artisan + industrial products",
"example4": "Seasonal combination",
"selected_info": "We'll set up a flexible system that allows you to manage both own production and external products according to your needs."
}
},
"errors": {
"step_failed": "Error in this step",
"data_invalid": "Invalid data",
@@ -210,6 +294,7 @@
"incomplete_warning": "{count} products remaining",
"incomplete_help": "You can continue, but we recommend entering all quantities for better inventory control.",
"complete": "Complete Setup",
"continue_to_next": "Continue",
"continue_anyway": "Continue anyway",
"no_products_title": "Initial Stock",
"no_products_message": "You can configure stock levels later in the inventory section."

View File

@@ -114,6 +114,16 @@
"quantity_required": "Quantity must be greater than zero",
"expiration_past": "Expiration date is in the past",
"expiring_soon": "Warning: This ingredient expires very soon!"
},
"templates": {
"basic-bakery": "Basic Bakery Ingredients",
"basic-bakery-desc": "Essential ingredients for any bakery",
"pastry-essentials": "Pastry Essentials",
"pastry-essentials-desc": "Ingredients for cakes and desserts",
"bread-basics": "Bread Basics",
"bread-basics-desc": "Everything needed for artisan bread",
"chocolate-specialties": "Chocolate Specialties",
"chocolate-specialties-desc": "For chocolate products"
}
},
"recipes": {
@@ -153,7 +163,9 @@
},
"placeholders": {
"name": "e.g., Baguette, Croissant",
"finished_product": "Select finished product..."
"finished_product": "Select finished product...",
"yield_quantity": "10",
"ingredient_quantity": "Qty"
},
"errors": {
"name_required": "Recipe name is required",

View File

@@ -18,6 +18,10 @@
"description": "Información básica",
"description_enterprise": "Información del obrador central"
},
"child_tenants": {
"title": "Configurar Sucursales",
"description": "Registra las sucursales de tu red empresarial"
},
"poi_detection": {
"title": "Análisis de Ubicación",
"description": "Detectar puntos de interés cercanos"
@@ -30,6 +34,18 @@
"title": "Configurar Inventario",
"description": "Sube datos de ventas y configura tu inventario inicial"
},
"upload_sales": {
"title": "Subir Datos de Ventas",
"description": "Cargar archivo con historial de ventas"
},
"inventory_review": {
"title": "Revisar Inventario",
"description": "Confirmar productos detectados"
},
"stock": {
"title": "Niveles de Stock",
"description": "Cantidades iniciales"
},
"suppliers": {
"title": "Proveedores",
"description": "Configura tus proveedores"
@@ -400,6 +416,7 @@
"incomplete_warning": "Faltan {count} productos por completar",
"incomplete_help": "Puedes continuar, pero recomendamos ingresar todas las cantidades para un mejor control de inventario.",
"complete": "Completar Configuración",
"continue_to_next": "Continuar",
"continue_anyway": "Continuar de todos modos",
"no_products_title": "Stock Inicial",
"no_products_message": "Podrás configurar los niveles de stock más tarde en la sección de inventario."

View File

@@ -153,7 +153,9 @@
},
"placeholders": {
"name": "ej., Baguette, Croissant",
"finished_product": "Seleccionar producto terminado..."
"finished_product": "Seleccionar producto terminado...",
"yield_quantity": "10",
"ingredient_quantity": "Cant."
},
"errors": {
"name_required": "El nombre de la receta es obligatorio",

View File

@@ -69,6 +69,40 @@
"cleaning": "Garbiketa",
"other": "Besteak"
},
"product_type": {
"ingredient": "Osagaia",
"finished_product": "Produktu Amaitua"
},
"production_stage": {
"raw_ingredient": "Osagai Gordina",
"par_baked": "Erdi-egosita",
"fully_baked": "Guztiz Egosita",
"prepared_dough": "Orea Prestatuta",
"frozen_product": "Produktu Izoztua"
},
"unit_of_measure": {
"kg": "Kilogramoak",
"g": "Gramoak",
"l": "Litroak",
"ml": "Mililitroak",
"units": "Unitateak",
"pcs": "Piezak",
"pkg": "Paketeak",
"bags": "Poltsak",
"boxes": "Kutxak"
},
"product_category": {
"bread": "Ogiak",
"croissants": "Croissantak",
"pastries": "Gozogintza",
"cakes": "Tartak",
"cookies": "Galletak",
"muffins": "Muffinak",
"sandwiches": "Ogitartekoak",
"seasonal": "Sasoikoak",
"beverages": "Edariak",
"other_products": "Beste Produktuak"
},
"stock_movement_type": {
"PURCHASE": "Erosketa",
"PRODUCTION_USE": "Ekoizpenean Erabilera",

View File

@@ -17,6 +17,10 @@
"description": "Oinarrizko informazioa",
"description_enterprise": "Okindegi zentralaren informazioa"
},
"child_tenants": {
"title": "Sukurtsalak Konfiguratu",
"description": "Erregistratu zure enpresa-sareko sukurtsalak"
},
"poi_detection": {
"title": "Kokapen Analisia",
"description": "Inguruko interesguneak detektatu"
@@ -29,6 +33,18 @@
"title": "Inbentarioa Konfiguratu",
"description": "Salmenten datuak igo eta hasierako inbentarioa ezarri"
},
"upload_sales": {
"title": "Salmenta Datuak Igo",
"description": "Igo fitxategia salmenta historiarekin"
},
"inventory_review": {
"title": "Inbentarioa Berrikusi",
"description": "Berretsi detektatutako produktuak"
},
"stock": {
"title": "Stock Mailak",
"description": "Hasierako kantit aterak"
},
"suppliers": {
"title": "Hornitzaileak",
"description": "Konfiguratu zure hornitzaileak"
@@ -382,6 +398,7 @@
"incomplete_warning": "{count} produktu osatu gabe geratzen dira",
"incomplete_help": "Jarraitu dezakezu, baina kopuru guztiak sartzea gomendatzen dizugu inbentario-kontrol hobeagorako.",
"complete": "Konfigurazioa Osatu",
"continue_to_next": "Jarraitu",
"continue_anyway": "Jarraitu hala ere",
"no_products_title": "Hasierako Stocka",
"no_products_message": "Stock-mailak geroago konfigura ditzakezu inbentario atalean."

View File

@@ -114,6 +114,16 @@
"quantity_required": "Kantitatea zero baino handiagoa izan behar da",
"expiration_past": "Iraungitze data iraganean dago",
"expiring_soon": "Abisua: Osagai hau laster iraungitzen da!"
},
"templates": {
"basic-bakery": "Oinarrizko Okindegi Osagaiak",
"basic-bakery-desc": "Okindegi orokorrentzako funtsezko osagaiak",
"pastry-essentials": "Pastelgintza Oinarrizkoak",
"pastry-essentials-desc": "Pastel eta postreerak egiteko osagaiak",
"bread-basics": "Ogi Oinarrizkoak",
"bread-basics-desc": "Ogi artisanalean beharrezko guztia",
"chocolate-specialties": "Txokolate Espezialiteak",
"chocolate-specialties-desc": "Txokolatezko produktuentzat"
}
},
"recipes": {
@@ -153,7 +163,9 @@
},
"placeholders": {
"name": "adib., Baguette, Croissant",
"finished_product": "Aukeratu produktu amaituak..."
"finished_product": "Aukeratu produktu amaituak...",
"yield_quantity": "10",
"ingredient_quantity": "Kant."
},
"errors": {
"name_required": "Errezeta izena beharrezkoa da",

View File

@@ -23,6 +23,8 @@ import aboutEs from './es/about.json';
import demoEs from './es/demo.json';
import blogEs from './es/blog.json';
import alertsEs from './es/alerts.json';
import onboardingEs from './es/onboarding.json';
import setupWizardEs from './es/setup_wizard.json';
// English translations
import commonEn from './en/common.json';
@@ -49,6 +51,8 @@ import aboutEn from './en/about.json';
import demoEn from './en/demo.json';
import blogEn from './en/blog.json';
import alertsEn from './en/alerts.json';
import onboardingEn from './en/onboarding.json';
import setupWizardEn from './en/setup_wizard.json';
// Basque translations
import commonEu from './eu/common.json';
@@ -75,6 +79,8 @@ import aboutEu from './eu/about.json';
import demoEu from './eu/demo.json';
import blogEu from './eu/blog.json';
import alertsEu from './eu/alerts.json';
import onboardingEu from './eu/onboarding.json';
import setupWizardEu from './eu/setup_wizard.json';
// Translation resources by language
export const resources = {
@@ -103,6 +109,8 @@ export const resources = {
demo: demoEs,
blog: blogEs,
alerts: alertsEs,
onboarding: onboardingEs,
setup_wizard: setupWizardEs,
},
en: {
common: commonEn,
@@ -129,6 +137,8 @@ export const resources = {
demo: demoEn,
blog: blogEn,
alerts: alertsEn,
onboarding: onboardingEn,
setup_wizard: setupWizardEn,
},
eu: {
common: commonEu,
@@ -155,6 +165,8 @@ export const resources = {
demo: demoEu,
blog: blogEu,
alerts: alertsEu,
onboarding: onboardingEu,
setup_wizard: setupWizardEu,
},
};
@@ -191,7 +203,7 @@ export const languageConfig = {
};
// Namespaces available in translations
export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders', 'help', 'features', 'about', 'demo', 'blog', 'alerts'] as const;
export const namespaces = ['common', 'auth', 'inventory', 'foodSafety', 'suppliers', 'orders', 'recipes', 'errors', 'dashboard', 'production', 'equipment', 'landing', 'settings', 'ajustes', 'reasoning', 'wizards', 'subscription', 'purchase_orders', 'help', 'features', 'about', 'demo', 'blog', 'alerts', 'onboarding', 'setup_wizard'] as const;
export type Namespace = typeof namespaces[number];
// Helper function to get language display name