feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
{
|
|
|
|
|
|
"common": {
|
|
|
|
|
|
"optional": "Opcional",
|
|
|
|
|
|
"required": "Requerido",
|
|
|
|
|
|
"autoGenerated": "Auto-generado",
|
|
|
|
|
|
"leaveEmptyForAutoGeneration": "Dejar vacío para auto-generar",
|
|
|
|
|
|
"readOnly": "Solo lectura - Auto-generado",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Se generará automáticamente",
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"autoGeneratedOnSave": "Auto-generado al guardar",
|
|
|
|
|
|
"show": "Mostrar",
|
|
|
|
|
|
"hide": "Ocultar",
|
|
|
|
|
|
"next": "Siguiente",
|
|
|
|
|
|
"back": "Atrás",
|
|
|
|
|
|
"complete": "Completar",
|
2025-12-17 13:03:52 +01:00
|
|
|
|
"stepOf": "Paso {current} de {total}"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
},
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"keyValueEditor": {
|
|
|
|
|
|
"showBuilder": "Mostrar Constructor",
|
|
|
|
|
|
"showJson": "Mostrar JSON",
|
|
|
|
|
|
"suggestions": "Sugerencias rápidas",
|
|
|
|
|
|
"keyPlaceholder": "Clave",
|
|
|
|
|
|
"valuePlaceholder": "Valor",
|
|
|
|
|
|
"remove": "Eliminar",
|
|
|
|
|
|
"addPair": "Agregar Parámetro",
|
|
|
|
|
|
"emptyState": "No hay parámetros aún. Haz clic en 'Agregar Parámetro' para comenzar."
|
|
|
|
|
|
},
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Agregar Inventario",
|
|
|
|
|
|
"inventoryDetails": "Detalles del Artículo de Inventario",
|
|
|
|
|
|
"fillRequiredInfo": "Complete la información requerida para crear un artículo de inventario",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"summary": "Resumen",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"productType": "Tipo de Producto",
|
|
|
|
|
|
"basicInfo": "Información Básica",
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"stockConfig": "Configuración de Stock",
|
|
|
|
|
|
"initialStock": "Stock Inicial"
|
|
|
|
|
|
},
|
|
|
|
|
|
"initialStockDescription": "Agrega uno o más lotes para registrar el inventario inicial",
|
|
|
|
|
|
"stockConfig": {
|
|
|
|
|
|
"product": "Producto",
|
|
|
|
|
|
"totalQuantity": "Cantidad Total",
|
|
|
|
|
|
"totalValue": "Valor Total",
|
|
|
|
|
|
"lotsRegistered": "Lotes Registrados",
|
|
|
|
|
|
"lot": "Lote",
|
|
|
|
|
|
"remove": "Eliminar",
|
|
|
|
|
|
"quantity": "Cantidad",
|
|
|
|
|
|
"unitCost": "Costo Unitario ($)",
|
|
|
|
|
|
"lotNumber": "Número de Lote",
|
|
|
|
|
|
"expirationDate": "Fecha de Expiración",
|
|
|
|
|
|
"location": "Ubicación",
|
|
|
|
|
|
"lotValue": "Valor del lote:",
|
|
|
|
|
|
"addInitialLot": "Agregar Lote Inicial",
|
|
|
|
|
|
"addAnotherLot": "Agregar Otro Lote",
|
|
|
|
|
|
"skipMessage": "Puedes saltar este paso si prefieres agregar el stock inicial más tarde"
|
2025-11-15 21:21:06 +01:00
|
|
|
|
},
|
|
|
|
|
|
"typeDescriptions": {
|
|
|
|
|
|
"ingredient": "Materias primas e ingredientes utilizados en recetas",
|
|
|
|
|
|
"finished_product": "Productos finales listos para venta o consumo"
|
|
|
|
|
|
},
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Nombre",
|
|
|
|
|
|
"namePlaceholder": "Ej: Harina de Uso General, Pan de Masa Madre",
|
|
|
|
|
|
"productType": "Tipo de Producto",
|
|
|
|
|
|
"unitOfMeasure": "Unidad de Medida",
|
|
|
|
|
|
"sku": "SKU",
|
|
|
|
|
|
"skuPlaceholder": "Dejar vacío para auto-generar",
|
|
|
|
|
|
"skuTooltip": "Dejar vacío para auto-generar desde el backend, o introducir SKU personalizado",
|
|
|
|
|
|
"barcode": "Código de Barras",
|
|
|
|
|
|
"barcodePlaceholder": "Código de Barras/UPC/EAN",
|
|
|
|
|
|
"ingredientCategory": "Categoría de Ingrediente",
|
|
|
|
|
|
"productCategory": "Categoría de Producto",
|
|
|
|
|
|
"brand": "Marca",
|
|
|
|
|
|
"brandPlaceholder": "Nombre de marca",
|
|
|
|
|
|
"description": "Descripción",
|
feat: Complete InventoryWizard i18n translation with extended field support
Add comprehensive translation keys for all inventory wizard fields and complete
the InventoryWizard component translation from English/Spanish/Basque.
Translation additions (en/es/eu):
- Extended inventory.fields with 48 new field labels and placeholders:
* Pricing fields (averageCost, standardCost, sellingPrice, minimumPrice)
* Inventory management fields (lowStockThreshold, reorderPoint, etc.)
* Product info fields (packageSize, shelfLifeDays, displayLifeHours, etc.)
* Storage fields (storageInstructions, handlingInstructions, isPerishable)
* Supplier fields (preferredSupplierId, supplierProductCode)
* Quality fields (allergenInfo, nutritionalInfo, certifications)
* Physical properties (weight, volume, dimensions, color)
* Status tracking (isActive, trackByLot, trackByExpiry, allowNegativeStock)
* Additional fields (notes, tags, customFields)
- Added ingredientCategories with 10 options (flour, dairy, eggs, fats, etc.)
- Added productCategories with 5 options (bread, pastry, cake, cookies, specialty)
InventoryWizard implementation:
- Translated all section headers (11 sections)
- Translated all field labels (58 fields)
- Translated all placeholder texts (35 placeholders)
- Translated all tooltips using tooltips namespace (11 tooltips)
- Translated ingredient and product category options (15 total)
- Translated wizard step title
Result: Fully internationalized InventoryWizard with complete en/es/eu support
covering all required fields, advanced options, and dynamic category selection.
2025-11-10 13:06:04 +00:00
|
|
|
|
"descriptionPlaceholder": "Descripción detallada del artículo de inventario",
|
|
|
|
|
|
"averageCost": "Coste Promedio (€)",
|
|
|
|
|
|
"lastPurchasePrice": "Último Precio de Compra (€)",
|
|
|
|
|
|
"standardCost": "Coste Estándar (€)",
|
|
|
|
|
|
"sellingPrice": "Precio de Venta (€)",
|
|
|
|
|
|
"minimumPrice": "Precio Mínimo (€)",
|
|
|
|
|
|
"lowStockThreshold": "Umbral de Stock Bajo",
|
|
|
|
|
|
"reorderPoint": "Punto de Reorden",
|
|
|
|
|
|
"reorderQuantity": "Cantidad de Reorden",
|
|
|
|
|
|
"maxStockLevel": "Nivel Máximo de Stock",
|
|
|
|
|
|
"leadTimeDays": "Tiempo de Entrega (días)",
|
|
|
|
|
|
"packageSize": "Tamaño del Paquete",
|
|
|
|
|
|
"packageSizePlaceholder": "Ej: bolsa de 25kg, paquete de 12",
|
|
|
|
|
|
"shelfLifeDays": "Vida Útil (días)",
|
|
|
|
|
|
"displayLifeHours": "Vida de Exhibición (horas)",
|
|
|
|
|
|
"storageTempRange": "Rango de Temperatura de Almacenamiento (°C)",
|
|
|
|
|
|
"storageTempMin": "Mín",
|
|
|
|
|
|
"storageTempMax": "Máx",
|
|
|
|
|
|
"storageInstructions": "Instrucciones de Almacenamiento",
|
|
|
|
|
|
"storageInstructionsPlaceholder": "Ej: Almacenar en lugar fresco y seco alejado de la luz directa del sol",
|
|
|
|
|
|
"handlingInstructions": "Instrucciones de Manejo",
|
|
|
|
|
|
"handlingInstructionsPlaceholder": "Requisitos especiales de manejo",
|
|
|
|
|
|
"isPerishable": "Artículo Perecedero",
|
|
|
|
|
|
"preferredSupplierId": "ID de Proveedor Preferido",
|
|
|
|
|
|
"preferredSupplierIdPlaceholder": "ID del Proveedor",
|
|
|
|
|
|
"supplierProductCode": "Código de Producto del Proveedor",
|
|
|
|
|
|
"supplierProductCodePlaceholder": "Código del producto del proveedor",
|
|
|
|
|
|
"allergenInfo": "Información de Alérgenos",
|
|
|
|
|
|
"allergenInfoPlaceholder": "gluten, leche, huevos",
|
|
|
|
|
|
"nutritionalInfo": "Información Nutricional",
|
|
|
|
|
|
"nutritionalInfoPlaceholder": "calorías:250, proteína:8g, carbohidratos:45g",
|
|
|
|
|
|
"certifications": "Certificaciones",
|
|
|
|
|
|
"certificationsPlaceholder": "Orgánico, Sin OGM, Kosher",
|
|
|
|
|
|
"weight": "Peso (kg)",
|
|
|
|
|
|
"volume": "Volumen (L)",
|
|
|
|
|
|
"dimensions": "Dimensiones (L×A×A cm)",
|
|
|
|
|
|
"dimensionsPlaceholder": "30×20×15",
|
|
|
|
|
|
"color": "Color",
|
|
|
|
|
|
"colorPlaceholder": "Color del producto",
|
|
|
|
|
|
"isActive": "Artículo Activo",
|
|
|
|
|
|
"trackByLot": "Rastrear por Lote/Batch",
|
|
|
|
|
|
"trackByExpiry": "Rastrear por Fecha de Vencimiento",
|
|
|
|
|
|
"allowNegativeStock": "Permitir Stock Negativo",
|
|
|
|
|
|
"notes": "Notas",
|
|
|
|
|
|
"notesPlaceholder": "Notas adicionales sobre este artículo",
|
|
|
|
|
|
"tags": "Etiquetas",
|
|
|
|
|
|
"tagsPlaceholder": "orgánico, premium, estacional",
|
|
|
|
|
|
"customFields": "Campos Personalizados (JSON)",
|
|
|
|
|
|
"customFieldsPlaceholder": "{\"campo_personalizado\": \"valor\"}"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
|
|
|
|
|
"basicInformation": "Información Básica",
|
|
|
|
|
|
"advancedOptions": "Opciones Avanzadas",
|
|
|
|
|
|
"advancedOptionsDescription": "Campos opcionales para gestión completa de inventario",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"additionalInformationDescription": "Identificadores de producto opcionales",
|
|
|
|
|
|
"additionalDetails": "Detalles Adicionales",
|
|
|
|
|
|
"additionalDetailsDescription": "Detalles opcionales del producto",
|
|
|
|
|
|
"advancedStockSettings": "Configuración Avanzada de Stock",
|
|
|
|
|
|
"advancedStockSettingsDescription": "Configurar umbrales de inventario y puntos de reorden",
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"pricingInformation": "Información de Precios",
|
|
|
|
|
|
"inventoryManagement": "Gestión de Inventario",
|
|
|
|
|
|
"productInformation": "Información del Producto",
|
|
|
|
|
|
"storageAndHandling": "Almacenamiento y Manejo",
|
|
|
|
|
|
"supplierInformation": "Información del Proveedor",
|
|
|
|
|
|
"qualityAndCompliance": "Calidad y Cumplimiento",
|
|
|
|
|
|
"physicalProperties": "Propiedades Físicas",
|
|
|
|
|
|
"statusAndTracking": "Estado y Seguimiento",
|
|
|
|
|
|
"additionalInformation": "Información Adicional"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productTypes": {
|
|
|
|
|
|
"ingredient": "Ingrediente",
|
|
|
|
|
|
"finished_product": "Producto Terminado",
|
|
|
|
|
|
"packaging": "Empaquetado",
|
|
|
|
|
|
"consumable": "Consumible"
|
|
|
|
|
|
},
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"select": "Seleccionar...",
|
|
|
|
|
|
"kg": "Kilogramos (kg)",
|
|
|
|
|
|
"g": "Gramos (g)",
|
|
|
|
|
|
"l": "Litros (L)",
|
|
|
|
|
|
"ml": "Mililitros (ml)",
|
|
|
|
|
|
"units": "Unidades",
|
|
|
|
|
|
"dozen": "Docena",
|
|
|
|
|
|
"lb": "Libras (lb)",
|
|
|
|
|
|
"oz": "Onzas (oz)"
|
feat: Complete InventoryWizard i18n translation with extended field support
Add comprehensive translation keys for all inventory wizard fields and complete
the InventoryWizard component translation from English/Spanish/Basque.
Translation additions (en/es/eu):
- Extended inventory.fields with 48 new field labels and placeholders:
* Pricing fields (averageCost, standardCost, sellingPrice, minimumPrice)
* Inventory management fields (lowStockThreshold, reorderPoint, etc.)
* Product info fields (packageSize, shelfLifeDays, displayLifeHours, etc.)
* Storage fields (storageInstructions, handlingInstructions, isPerishable)
* Supplier fields (preferredSupplierId, supplierProductCode)
* Quality fields (allergenInfo, nutritionalInfo, certifications)
* Physical properties (weight, volume, dimensions, color)
* Status tracking (isActive, trackByLot, trackByExpiry, allowNegativeStock)
* Additional fields (notes, tags, customFields)
- Added ingredientCategories with 10 options (flour, dairy, eggs, fats, etc.)
- Added productCategories with 5 options (bread, pastry, cake, cookies, specialty)
InventoryWizard implementation:
- Translated all section headers (11 sections)
- Translated all field labels (58 fields)
- Translated all placeholder texts (35 placeholders)
- Translated all tooltips using tooltips namespace (11 tooltips)
- Translated ingredient and product category options (15 total)
- Translated wizard step title
Result: Fully internationalized InventoryWizard with complete en/es/eu support
covering all required fields, advanced options, and dynamic category selection.
2025-11-10 13:06:04 +00:00
|
|
|
|
},
|
|
|
|
|
|
"ingredientCategories": {
|
|
|
|
|
|
"select": "Seleccionar...",
|
|
|
|
|
|
"flour": "Harinas",
|
|
|
|
|
|
"dairy": "Lácteos",
|
|
|
|
|
|
"eggs": "Huevos",
|
|
|
|
|
|
"fats": "Grasas y Aceites",
|
|
|
|
|
|
"sweeteners": "Endulzantes",
|
|
|
|
|
|
"additives": "Aditivos",
|
|
|
|
|
|
"fruits": "Frutas",
|
|
|
|
|
|
"nuts": "Nueces y Semillas",
|
|
|
|
|
|
"spices": "Especias",
|
|
|
|
|
|
"leavening": "Agentes Leudantes"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productCategories": {
|
|
|
|
|
|
"select": "Seleccionar...",
|
|
|
|
|
|
"bread": "Pan",
|
|
|
|
|
|
"pastry": "Pastelería",
|
|
|
|
|
|
"cake": "Tortas",
|
|
|
|
|
|
"cookies": "Galletas",
|
|
|
|
|
|
"specialty": "Artículos Especiales"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"qualityTemplate": {
|
|
|
|
|
|
"title": "Agregar Plantilla de Calidad",
|
|
|
|
|
|
"templateDetails": "Detalles de la Plantilla de Calidad",
|
|
|
|
|
|
"fillRequiredInfo": "Complete la información requerida para crear una plantilla de control de calidad",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"selectCheckType": "Seleccionar Tipo de Control de Calidad",
|
|
|
|
|
|
"selectCheckTypeDescription": "Elija el tipo de control de calidad que desea crear",
|
|
|
|
|
|
"essentialConfiguration": "Configuración Esencial",
|
|
|
|
|
|
"essentialConfigurationDescription": "Defina las propiedades principales de su plantilla de control de calidad",
|
|
|
|
|
|
"criteriaAndSettings": "Criterios y Configuración de Calidad",
|
|
|
|
|
|
"criteriaAndSettingsDescription": "Configure los métodos de puntuación y criterios avanzados de calidad",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"checkType": "Tipo de Control",
|
|
|
|
|
|
"essentialConfiguration": "Configuración",
|
|
|
|
|
|
"criteriaSettings": "Criterios y Ajustes"
|
|
|
|
|
|
},
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Nombre",
|
|
|
|
|
|
"namePlaceholder": "Ej: Control de Calidad del Pan, Inspección de Higiene",
|
|
|
|
|
|
"checkType": "Tipo de Verificación",
|
|
|
|
|
|
"weight": "Peso",
|
|
|
|
|
|
"weightTooltip": "Peso de importancia para la puntuación (0.0-10.0)",
|
|
|
|
|
|
"templateCode": "Código de Plantilla",
|
|
|
|
|
|
"templateCodePlaceholder": "Dejar vacío para auto-generar",
|
|
|
|
|
|
"templateCodeTooltip": "Dejar vacío para auto-generar desde el backend, o introducir código personalizado",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"category": "Categoría",
|
|
|
|
|
|
"categoryPlaceholder": "Ej: apariencia, estructura, textura",
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"version": "Versión",
|
|
|
|
|
|
"description": "Descripción",
|
|
|
|
|
|
"descriptionPlaceholder": "Descripción detallada de la plantilla de control de calidad",
|
|
|
|
|
|
"applicableStages": "Etapas Aplicables",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"applicableStagesTooltip": "Seleccione las etapas de producción donde se aplica este control de calidad",
|
|
|
|
|
|
"applicableStagesHelp": "Dejar vacío para aplicar a todas las etapas",
|
|
|
|
|
|
"applicablePlaceholder": "amasado, fermentación, horneado, enfriamiento",
|
|
|
|
|
|
"instructions": "Instrucciones",
|
|
|
|
|
|
"instructionsPlaceholder": "Instrucciones paso a paso para realizar este control de calidad",
|
|
|
|
|
|
"minValue": "Valor Mínimo",
|
|
|
|
|
|
"maxValue": "Valor Máximo",
|
|
|
|
|
|
"targetValue": "Valor Objetivo",
|
|
|
|
|
|
"unit": "Unidad",
|
|
|
|
|
|
"unitPlaceholder": "Ej: °C, g, cm, %",
|
|
|
|
|
|
"tolerancePercentage": "Porcentaje de Tolerancia",
|
|
|
|
|
|
"toleranceTooltip": "Desviación aceptable del valor objetivo (0-100%)",
|
|
|
|
|
|
"scoringMethod": "Método de Puntuación",
|
|
|
|
|
|
"passThreshold": "Umbral de Aprobación (%)",
|
|
|
|
|
|
"passThresholdTooltip": "Porcentaje de puntuación mínimo requerido para aprobar (0-100%)",
|
|
|
|
|
|
"frequencyDays": "Frecuencia (días)",
|
|
|
|
|
|
"frequencyDaysTooltip": "Con qué frecuencia debe realizarse este control (en días)",
|
|
|
|
|
|
"frequencyDaysPlaceholder": "Dejar vacío para basado en lotes",
|
|
|
|
|
|
"requiredCheck": "Verificación Requerida",
|
|
|
|
|
|
"checkPointsJsonArray": "Puntos de Control (Array JSON)",
|
|
|
|
|
|
"checkPointsTooltip": "Array de puntos de control: [{\"name\": \"Control Visual\", \"description\": \"...\", \"weight\": 1.0}]",
|
|
|
|
|
|
"checkPointsPlaceholder": "[{\"name\": \"Inspección Visual\", \"description\": \"Verificar apariencia\", \"expected_value\": \"Marrón dorado\", \"measurement_type\": \"visual\", \"is_critical\": false, \"weight\": 1.0}]",
|
|
|
|
|
|
"acceptanceCriteria": "Criterios de Aceptación",
|
|
|
|
|
|
"acceptanceCriteriaPlaceholder": "Ej: Color dorado uniforme, textura esponjosa, sin quemaduras...",
|
|
|
|
|
|
"parametersJson": "Parámetros (JSON)",
|
|
|
|
|
|
"parametersTooltip": "Parámetros de plantilla: {\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"parametersPlaceholder": "{\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"thresholdsJson": "Umbrales (JSON)",
|
|
|
|
|
|
"thresholdsTooltip": "Valores de umbral: {\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"thresholdsPlaceholder": "{\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"scoringCriteriaJson": "Criterios de Puntuación (JSON)",
|
|
|
|
|
|
"scoringCriteriaTooltip": "Criterios de puntuación personalizados: {\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"scoringCriteriaPlaceholder": "{\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"responsibleRole": "Rol/Persona Responsable",
|
|
|
|
|
|
"responsibleRolePlaceholder": "Ej: Gerente de Producción, Panadero",
|
|
|
|
|
|
"requiredEquipment": "Equipos/Herramientas Requeridas",
|
|
|
|
|
|
"requiredEquipmentPlaceholder": "Ej: Termómetro, báscula, temporizador",
|
|
|
|
|
|
"specificConditions": "Condiciones o Notas Específicas",
|
|
|
|
|
|
"specificConditionsPlaceholder": "Ej: Solo aplicable en días húmedos, verificar 30 min después de hornear...",
|
|
|
|
|
|
"activeTemplate": "Plantilla Activa",
|
|
|
|
|
|
"requiresPhotoEvidence": "Requiere Evidencia Fotográfica",
|
|
|
|
|
|
"criticalControlPoint": "Punto Crítico de Control (PCC)",
|
|
|
|
|
|
"notifyOnFailure": "Notificar en Falla"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
},
|
|
|
|
|
|
"checkTypes": {
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"visual": "Inspección Visual",
|
|
|
|
|
|
"measurement": "Medición",
|
|
|
|
|
|
"temperature": "Temperatura",
|
|
|
|
|
|
"weight": "Peso",
|
|
|
|
|
|
"boolean": "Control Aprobado/Reprobado",
|
|
|
|
|
|
"timing": "Temporización",
|
|
|
|
|
|
"checklist": "Lista de Verificación"
|
|
|
|
|
|
},
|
|
|
|
|
|
"checkTypeDescriptions": {
|
|
|
|
|
|
"visual": "Inspeccionar apariencia, color y características visuales de calidad",
|
|
|
|
|
|
"measurement": "Medir dimensiones, tamaños o cantidades específicas",
|
|
|
|
|
|
"temperature": "Monitorear y verificar lecturas de temperatura",
|
|
|
|
|
|
"weight": "Verificar mediciones de peso y masa",
|
|
|
|
|
|
"boolean": "Controles simples de sí/no o aprobado/reprobado",
|
|
|
|
|
|
"timing": "Rastrear criterios de calidad basados en tiempo",
|
|
|
|
|
|
"checklist": "Verificación de lista de puntos múltiples"
|
|
|
|
|
|
},
|
|
|
|
|
|
"processStages": {
|
|
|
|
|
|
"mixing": "Amasado",
|
|
|
|
|
|
"proofing": "Fermentación",
|
|
|
|
|
|
"shaping": "Formado",
|
|
|
|
|
|
"baking": "Horneado",
|
|
|
|
|
|
"cooling": "Enfriamiento",
|
|
|
|
|
|
"packaging": "Empaquetado",
|
|
|
|
|
|
"finishing": "Acabado"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
|
|
|
|
|
"basicInformation": "Información Básica",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"additionalIdentifiers": "Identificadores Adicionales",
|
|
|
|
|
|
"additionalIdentifiersDescription": "Identificadores opcionales para organización",
|
|
|
|
|
|
"measurementSpecifications": "Especificaciones de Medición",
|
|
|
|
|
|
"additionalDetails": "Detalles Adicionales",
|
|
|
|
|
|
"additionalDetailsDescription": "Instrucciones detalladas opcionales",
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"scoringConfiguration": "Configuración de Puntuación",
|
|
|
|
|
|
"advancedOptions": "Opciones Avanzadas",
|
feat: Add comprehensive i18n support to QualityTemplateWizard
Added full internationalization support for the Quality Template wizard:
Translation keys added (en/es/eu):
- Scoring methods (weighted average, pass/fail, percentage, points-based)
- Advanced fields (check points, parameters, thresholds, scoring criteria)
- Section headers (check points config, advanced config, responsibility, control settings)
- Control settings (active template, photo evidence, critical control point, notify on failure)
Component updates:
- Translated all hardcoded strings in QualityTemplateWizard.tsx
- Implemented useTranslation hook
- Updated all labels, placeholders, tooltips, and section headers
- Added translations for scoring configuration section
- Translated advanced options including JSONB configuration fields
- Translated responsibility & requirements section
- Translated control settings checkboxes
Follows established pattern from InventoryWizard.tsx for consistency.
2025-11-10 13:16:49 +00:00
|
|
|
|
"advancedOptionsDescription": "Campos opcionales para configuración completa de plantilla de calidad",
|
|
|
|
|
|
"checkPointsConfiguration": "Configuración de Puntos de Control",
|
|
|
|
|
|
"advancedConfiguration": "Configuración Avanzada (JSONB)",
|
|
|
|
|
|
"responsibilityRequirements": "Responsabilidad y Requisitos",
|
|
|
|
|
|
"controlSettings": "Configuración de Control"
|
|
|
|
|
|
},
|
|
|
|
|
|
"scoringMethods": {
|
|
|
|
|
|
"scoringMethod": "Método de Puntuación",
|
|
|
|
|
|
"weightedAverage": "Promedio Ponderado",
|
|
|
|
|
|
"passFail": "Aprobar/Reprobar",
|
|
|
|
|
|
"percentage": "Porcentaje",
|
|
|
|
|
|
"pointsBased": "Basado en Puntos"
|
|
|
|
|
|
},
|
|
|
|
|
|
"advancedFields": {
|
|
|
|
|
|
"checkPointsJsonArray": "Puntos de Control (Array JSON)",
|
|
|
|
|
|
"checkPointsTooltip": "Array de puntos de control: [{\"name\": \"Control Visual\", \"description\": \"...\", \"weight\": 1.0}]",
|
|
|
|
|
|
"checkPointsPlaceholder": "[{\"name\": \"Inspección Visual\", \"description\": \"Verificar apariencia\", \"expected_value\": \"Marrón dorado\", \"measurement_type\": \"visual\", \"is_critical\": false, \"weight\": 1.0}]",
|
|
|
|
|
|
"acceptanceCriteria": "Criterios de Aceptación",
|
|
|
|
|
|
"acceptanceCriteriaPlaceholder": "Ej: Color dorado uniforme, textura esponjosa, sin quemaduras...",
|
|
|
|
|
|
"parametersJson": "Parámetros (JSON)",
|
|
|
|
|
|
"parametersTooltip": "Parámetros de plantilla: {\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"parametersPlaceholder": "{\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"thresholdsJson": "Umbrales (JSON)",
|
|
|
|
|
|
"thresholdsTooltip": "Valores de umbral: {\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"thresholdsPlaceholder": "{\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"scoringCriteriaJson": "Criterios de Puntuación (JSON)",
|
|
|
|
|
|
"scoringCriteriaTooltip": "Criterios de puntuación personalizados: {\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"scoringCriteriaPlaceholder": "{\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"responsibleRole": "Rol/Persona Responsable",
|
|
|
|
|
|
"responsibleRolePlaceholder": "Ej: Gerente de Producción, Panadero",
|
|
|
|
|
|
"requiredEquipment": "Equipos/Herramientas Requeridas",
|
|
|
|
|
|
"requiredEquipmentPlaceholder": "Ej: Termómetro, báscula, temporizador",
|
|
|
|
|
|
"specificConditions": "Condiciones o Notas Específicas",
|
|
|
|
|
|
"specificConditionsPlaceholder": "Ej: Solo aplicable en días húmedos, verificar 30 min después de hornear...",
|
|
|
|
|
|
"passThresholdPercent": "Umbral de Aprobación (%)",
|
|
|
|
|
|
"frequencyDays": "Frecuencia (días)",
|
|
|
|
|
|
"frequencyPlaceholder": "Dejar vacío para basado en lotes",
|
|
|
|
|
|
"requiredCheck": "Verificación Requerida",
|
|
|
|
|
|
"activeTemplate": "Plantilla Activa",
|
|
|
|
|
|
"requiresPhotoEvidence": "Requiere Evidencia Fotográfica",
|
|
|
|
|
|
"criticalControlPoint": "Punto Crítico de Control (PCC)",
|
|
|
|
|
|
"notifyOnFailure": "Notificar en Falla",
|
|
|
|
|
|
"templateDetailsTitle": "Detalles de Plantilla"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerOrder": {
|
|
|
|
|
|
"title": "Agregar Pedido",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"customerSelection": "Selección de Cliente",
|
|
|
|
|
|
"orderItems": "Artículos del Pedido",
|
|
|
|
|
|
"deliveryAndPayment": "Entrega y Pago"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerSelection": {
|
|
|
|
|
|
"title": "Seleccionar o Crear Cliente",
|
|
|
|
|
|
"subtitle": "Elija un cliente existente o cree uno nuevo",
|
|
|
|
|
|
"searchPlaceholder": "Buscar clientes...",
|
|
|
|
|
|
"createNew": "Crear nuevo cliente",
|
|
|
|
|
|
"backToList": "← Volver a la lista de clientes",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"customerName": "Nombre del Cliente",
|
|
|
|
|
|
"customerNamePlaceholder": "Ej: Restaurante El Molino",
|
|
|
|
|
|
"customerType": "Tipo de Cliente",
|
|
|
|
|
|
"phone": "Teléfono",
|
|
|
|
|
|
"phonePlaceholder": "+34 123 456 789",
|
|
|
|
|
|
"email": "Correo Electrónico",
|
|
|
|
|
|
"emailPlaceholder": "contacto@restaurante.com"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerTypes": {
|
|
|
|
|
|
"retail": "Minorista",
|
|
|
|
|
|
"wholesale": "Mayorista",
|
|
|
|
|
|
"event": "Evento",
|
|
|
|
|
|
"restaurant": "Restaurante"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"title": "Agregar Productos al Pedido",
|
|
|
|
|
|
"subtitle": "Seleccione productos y cantidades",
|
|
|
|
|
|
"addItem": "Agregar Artículo",
|
|
|
|
|
|
"removeItem": "Eliminar artículo",
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"customer": "Cliente",
|
|
|
|
|
|
"orderProducts": "Productos del Pedido",
|
|
|
|
|
|
"productNumber": "Producto #{{number}}",
|
|
|
|
|
|
"product": "Producto",
|
|
|
|
|
|
"productPlaceholder": "Seleccionar producto...",
|
|
|
|
|
|
"selectProduct": "Seleccionar producto...",
|
|
|
|
|
|
"quantity": "Cantidad",
|
|
|
|
|
|
"unitPrice": "Precio Unitario (€)",
|
|
|
|
|
|
"specialRequirements": "Requisitos Personalizados",
|
|
|
|
|
|
"specialRequirementsPlaceholder": "Instrucciones especiales...",
|
|
|
|
|
|
"customRequirements": "Requisitos Personalizados",
|
|
|
|
|
|
"customRequirementsPlaceholder": "Instrucciones especiales...",
|
|
|
|
|
|
"subtotal": "Subtotal",
|
|
|
|
|
|
"total": "Cantidad Total",
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"fields": {
|
|
|
|
|
|
"product": "Producto",
|
|
|
|
|
|
"productPlaceholder": "Seleccionar producto...",
|
|
|
|
|
|
"quantity": "Cantidad",
|
|
|
|
|
|
"unitPrice": "Precio Unitario (€)",
|
|
|
|
|
|
"customRequirements": "Requisitos Personalizados",
|
|
|
|
|
|
"customRequirementsPlaceholder": "Instrucciones especiales...",
|
|
|
|
|
|
"subtotal": "Subtotal"
|
2025-11-18 07:17:17 +01:00
|
|
|
|
}
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
},
|
|
|
|
|
|
"deliveryPayment": {
|
|
|
|
|
|
"title": "Detalles de Entrega y Pago",
|
|
|
|
|
|
"subtitle": "Configurar entrega, pago y detalles del pedido",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"requestedDeliveryDate": "Fecha de Entrega Solicitada",
|
|
|
|
|
|
"orderNumber": "Número de Pedido",
|
|
|
|
|
|
"orderNumberTooltip": "Generado automáticamente por el backend al crear el pedido (formato: ORD-AAAAMMDD-####)",
|
|
|
|
|
|
"status": "Estado",
|
|
|
|
|
|
"orderType": "Tipo de Pedido",
|
|
|
|
|
|
"priority": "Prioridad"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
|
|
|
|
|
"basicInfo": "Información Básica del Pedido",
|
2025-11-10 13:37:20 +00:00
|
|
|
|
"deliveryInfo": "Detalles de Entrega",
|
|
|
|
|
|
"paymentInfo": "Detalles de Pago",
|
|
|
|
|
|
"orderSummary": "Resumen del Pedido",
|
|
|
|
|
|
"advancedOptions": "Opciones Avanzadas",
|
|
|
|
|
|
"advancedOptionsDescription": "Campos opcionales para gestión completa de pedidos",
|
|
|
|
|
|
"pricingDetails": "Detalles de Precios",
|
|
|
|
|
|
"productionScheduling": "Producción y Programación",
|
|
|
|
|
|
"fulfillmentTracking": "Cumplimiento y Seguimiento",
|
|
|
|
|
|
"sourceChannel": "Origen y Canal",
|
|
|
|
|
|
"communicationNotes": "Comunicación y Notas",
|
|
|
|
|
|
"notifications": "Notificaciones",
|
|
|
|
|
|
"qualityRequirements": "Calidad y Requisitos",
|
|
|
|
|
|
"additionalOptions": "Opciones Adicionales"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderTypes": {
|
|
|
|
|
|
"standard": "Estándar",
|
|
|
|
|
|
"custom": "Personalizado",
|
|
|
|
|
|
"bulk": "A Granel",
|
|
|
|
|
|
"urgent": "Urgente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Baja",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "Alta",
|
|
|
|
|
|
"urgent": "Urgente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"pending": "Pendiente",
|
|
|
|
|
|
"confirmed": "Confirmado",
|
|
|
|
|
|
"in_production": "En Producción",
|
|
|
|
|
|
"ready": "Listo",
|
|
|
|
|
|
"delivered": "Entregado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryMethods": {
|
|
|
|
|
|
"pickup": "Recogida",
|
|
|
|
|
|
"pickupDesc": "Recogida del cliente",
|
|
|
|
|
|
"delivery": "Entrega",
|
|
|
|
|
|
"deliveryDesc": "Entrega a domicilio",
|
|
|
|
|
|
"shipping": "Envío",
|
|
|
|
|
|
"shippingDesc": "Servicio de mensajería"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentMethods": {
|
|
|
|
|
|
"cash": "Efectivo",
|
|
|
|
|
|
"card": "Tarjeta",
|
|
|
|
|
|
"bank_transfer": "Transferencia Bancaria",
|
|
|
|
|
|
"invoice": "Factura",
|
|
|
|
|
|
"account": "Cuenta"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentTerms": {
|
|
|
|
|
|
"immediate": "Inmediato",
|
|
|
|
|
|
"net_30": "Neto 30",
|
|
|
|
|
|
"net_60": "Neto 60"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentStatuses": {
|
|
|
|
|
|
"pending": "Pendiente",
|
|
|
|
|
|
"partial": "Parcial",
|
|
|
|
|
|
"paid": "Pagado",
|
|
|
|
|
|
"overdue": "Vencido"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderSources": {
|
|
|
|
|
|
"manual": "Manual",
|
|
|
|
|
|
"phone": "Teléfono",
|
|
|
|
|
|
"email": "Correo Electrónico",
|
|
|
|
|
|
"website": "Sitio Web",
|
|
|
|
|
|
"app": "Aplicación Móvil"
|
|
|
|
|
|
},
|
|
|
|
|
|
"salesChannels": {
|
|
|
|
|
|
"direct": "Directo",
|
|
|
|
|
|
"wholesale": "Mayorista",
|
|
|
|
|
|
"retail": "Minorista",
|
|
|
|
|
|
"online": "En Línea"
|
|
|
|
|
|
},
|
|
|
|
|
|
"qualityCheckStatuses": {
|
|
|
|
|
|
"not_started": "No Iniciado",
|
|
|
|
|
|
"pending": "Pendiente",
|
|
|
|
|
|
"passed": "Aprobado",
|
|
|
|
|
|
"failed": "Reprobado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"loadingCustomers": "Cargando clientes...",
|
|
|
|
|
|
"loadingProducts": "Cargando productos...",
|
|
|
|
|
|
"errorLoadingCustomers": "Error al cargar clientes",
|
|
|
|
|
|
"errorLoadingProducts": "Error al cargar productos",
|
|
|
|
|
|
"noCustomersFound": "No se encontraron clientes",
|
|
|
|
|
|
"tryDifferentSearch": "Intenta con un término de búsqueda diferente",
|
|
|
|
|
|
"noProductsInOrder": "No hay productos en el pedido",
|
|
|
|
|
|
"clickAddProduct": "Haz clic en \"Agregar Producto\" para comenzar",
|
|
|
|
|
|
"newCustomer": "Nuevo Cliente",
|
|
|
|
|
|
"customer": "Cliente",
|
|
|
|
|
|
"products": "Productos",
|
|
|
|
|
|
"items": "artículos",
|
|
|
|
|
|
"total": "Total",
|
|
|
|
|
|
"productNumber": "Producto #",
|
|
|
|
|
|
"searchByName": "Buscar cliente por nombre...",
|
|
|
|
|
|
"selectCustomer": "Seleccionar Cliente",
|
|
|
|
|
|
"searchForCustomer": "Buscar un cliente existente o crear uno nuevo",
|
|
|
|
|
|
"orderItems": "Artículos del Pedido",
|
|
|
|
|
|
"addProducts": "Agregar Productos al Pedido",
|
|
|
|
|
|
"customerLabel": "Cliente:",
|
|
|
|
|
|
"productsLabel": "Productos:",
|
|
|
|
|
|
"totalLabel": "Total:",
|
|
|
|
|
|
"orderTotal": "Total del Pedido:",
|
|
|
|
|
|
"newCustomerHeader": "Nuevo Cliente",
|
|
|
|
|
|
"orderProducts": "Productos del Pedido",
|
|
|
|
|
|
"addProduct": "Agregar Producto",
|
|
|
|
|
|
"removeItem": "Eliminar artículo",
|
|
|
|
|
|
"optionalEmail": "Correo Electrónico (Opcional)",
|
|
|
|
|
|
"readOnlyAutoGenerated": "Número de Pedido (Solo lectura - Auto-generado)",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Se generará automáticamente",
|
|
|
|
|
|
"autoGeneratedOnSave": "Auto-generado al guardar",
|
|
|
|
|
|
"orderNumberFormat": "formato: ORD-AAAAMMDD-####",
|
|
|
|
|
|
"selectProduct": "Seleccionar producto...",
|
|
|
|
|
|
"deliveryAddress": "Dirección de Entrega",
|
|
|
|
|
|
"deliveryAddressPlaceholder": "Calle, número, piso, código postal, ciudad...",
|
|
|
|
|
|
"deliveryContactName": "Nombre de Contacto para Entrega",
|
|
|
|
|
|
"deliveryContactNamePlaceholder": "Persona de contacto",
|
|
|
|
|
|
"deliveryContactPhone": "Teléfono de Contacto para Entrega",
|
|
|
|
|
|
"deliveryMethod": "Método de Entrega",
|
|
|
|
|
|
"paymentMethod": "Método de Pago",
|
|
|
|
|
|
"paymentTerms": "Términos de Pago",
|
|
|
|
|
|
"paymentStatus": "Estado de Pago",
|
|
|
|
|
|
"paymentDueDate": "Fecha de Vencimiento del Pago",
|
|
|
|
|
|
"discountPercent": "Descuento (%)",
|
|
|
|
|
|
"deliveryFee": "Tarifa de Entrega (€)",
|
|
|
|
|
|
"productionStartDate": "Fecha de Inicio de Producción",
|
|
|
|
|
|
"productionDueDate": "Fecha de Vencimiento de Producción",
|
|
|
|
|
|
"productionBatchNumber": "Número de Lote de Producción",
|
|
|
|
|
|
"productionBatchNumberPlaceholder": "LOTE-001",
|
|
|
|
|
|
"deliveryTimeWindow": "Ventana de Tiempo de Entrega",
|
|
|
|
|
|
"deliveryTimeWindowPlaceholder": "Ej: 9:00 AM - 11:00 AM",
|
|
|
|
|
|
"productionNotes": "Notas de Producción",
|
|
|
|
|
|
"productionNotesPlaceholder": "Requisitos especiales de producción o notas",
|
|
|
|
|
|
"shippingTrackingNumber": "Número de Seguimiento de Envío",
|
|
|
|
|
|
"shippingTrackingNumberPlaceholder": "Número de seguimiento",
|
|
|
|
|
|
"shippingCarrier": "Transportista de Envío",
|
|
|
|
|
|
"shippingCarrierPlaceholder": "Ej: DHL, UPS, FedEx",
|
|
|
|
|
|
"pickupLocation": "Ubicación de Recogida",
|
|
|
|
|
|
"pickupLocationPlaceholder": "Ubicación de tienda para recogida",
|
|
|
|
|
|
"actualDeliveryDate": "Fecha Real de Entrega",
|
|
|
|
|
|
"orderSource": "Origen del Pedido",
|
|
|
|
|
|
"salesChannel": "Canal de Ventas",
|
|
|
|
|
|
"salesRepId": "ID del Representante de Ventas",
|
|
|
|
|
|
"salesRepIdPlaceholder": "ID o nombre del representante de ventas",
|
|
|
|
|
|
"customerPurchaseOrder": "Orden de Compra del Cliente #",
|
|
|
|
|
|
"customerPurchaseOrderPlaceholder": "Número de OC del cliente",
|
|
|
|
|
|
"deliveryInstructions": "Instrucciones de Entrega",
|
|
|
|
|
|
"deliveryInstructionsPlaceholder": "Instrucciones especiales de entrega",
|
|
|
|
|
|
"specialInstructions": "Instrucciones Especiales",
|
|
|
|
|
|
"specialInstructionsPlaceholder": "Cualquier requisito o instrucción especial",
|
|
|
|
|
|
"internalNotes": "Notas Internas",
|
|
|
|
|
|
"internalNotesPlaceholder": "Notas internas (no visibles para el cliente)",
|
|
|
|
|
|
"customerNotes": "Notas del Cliente",
|
|
|
|
|
|
"customerNotesPlaceholder": "Notas de/para el cliente",
|
|
|
|
|
|
"notifyOnStatusChange": "Notificar en Cambio de Estado",
|
|
|
|
|
|
"notifyOnDelivery": "Notificar en Entrega",
|
|
|
|
|
|
"notificationEmail": "Correo de Notificación",
|
|
|
|
|
|
"notificationEmailPlaceholder": "cliente@correo.com",
|
|
|
|
|
|
"notificationPhone": "Teléfono de Notificación",
|
|
|
|
|
|
"qualityCheckRequired": "Control de Calidad Requerido",
|
|
|
|
|
|
"qualityCheckStatus": "Estado del Control de Calidad",
|
|
|
|
|
|
"packagingInstructions": "Instrucciones de Empaquetado",
|
|
|
|
|
|
"packagingInstructionsPlaceholder": "Requisitos especiales de empaquetado",
|
|
|
|
|
|
"labelingRequirements": "Requisitos de Etiquetado",
|
|
|
|
|
|
"labelingRequirementsPlaceholder": "Requisitos de etiqueta personalizados",
|
|
|
|
|
|
"recurringOrder": "Pedido Recurrente",
|
|
|
|
|
|
"recurringSchedule": "Programa Recurrente",
|
|
|
|
|
|
"recurringSchedulePlaceholder": "Ej: Semanalmente los lunes, Cada 2 semanas",
|
|
|
|
|
|
"tags": "Etiquetas",
|
|
|
|
|
|
"tagsPlaceholder": "urgente, vip, mayorista",
|
|
|
|
|
|
"tagsTooltip": "Etiquetas separadas por comas para búsqueda y filtrado más fácil",
|
|
|
|
|
|
"metadata": "Metadatos (JSON)",
|
|
|
|
|
|
"metadataPlaceholder": "{\"campo_personalizado\": \"valor\"}",
|
|
|
|
|
|
"metadataTooltip": "Datos personalizados adicionales en formato JSON"
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"itemTypeSelector": {
|
|
|
|
|
|
"title": "Seleccionar Tipo",
|
|
|
|
|
|
"description": "Elige qué deseas agregar",
|
|
|
|
|
|
"types": {
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inventario",
|
|
|
|
|
|
"description": "Agregar ingredientes o productos a tu inventario"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Proveedor",
|
|
|
|
|
|
"description": "Agregar un nuevo proveedor o vendedor"
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Receta",
|
|
|
|
|
|
"description": "Crear una nueva receta o fórmula"
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"title": "Maquinaria",
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
"description": "Registrar equipo o maquinaria de panadería"
|
|
|
|
|
|
},
|
|
|
|
|
|
"quality-template": {
|
|
|
|
|
|
"title": "Plantilla de Calidad",
|
|
|
|
|
|
"description": "Crear una plantilla de control de calidad"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer-order": {
|
|
|
|
|
|
"title": "Pedido de Cliente",
|
|
|
|
|
|
"description": "Crear un nuevo pedido de cliente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Cliente",
|
|
|
|
|
|
"description": "Agregar un nuevo cliente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"team-member": {
|
|
|
|
|
|
"title": "Miembro del Equipo",
|
|
|
|
|
|
"description": "Agregar un miembro del equipo o empleado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sales-entry": {
|
|
|
|
|
|
"title": "Registro de Ventas",
|
|
|
|
|
|
"description": "Registrar una transacción de venta"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"tooltips": {
|
|
|
|
|
|
"averageCost": "Costo promedio por unidad basado en historial de compras",
|
|
|
|
|
|
"standardCost": "Costo estándar/esperado por unidad para cálculos de costos",
|
|
|
|
|
|
"lowStockThreshold": "Alertar cuando el stock caiga por debajo de este nivel",
|
|
|
|
|
|
"reorderPoint": "Activar reorden cuando el stock alcance este nivel",
|
|
|
|
|
|
"reorderQuantity": "Cantidad estándar a ordenar al reordenar",
|
|
|
|
|
|
"leadTime": "Tiempo entre la colocación del pedido y la entrega",
|
|
|
|
|
|
"displayLife": "Horas que el producto puede ser exhibido antes de que la calidad se degrade",
|
|
|
|
|
|
"allergenInfo": "Lista separada por comas: ej: gluten, leche, huevos, nueces",
|
|
|
|
|
|
"nutritionalInfo": "Datos nutricionales clave como lista separada por comas",
|
|
|
|
|
|
"certifications": "Lista separada por comas: ej: Orgánico, No GMO, Kosher",
|
|
|
|
|
|
"tags": "Etiquetas separadas por comas para facilitar búsqueda y filtrado",
|
|
|
|
|
|
"customFields": "Datos personalizados adicionales en formato JSON",
|
|
|
|
|
|
"passThreshold": "Puntuación mínima requerida para aprobar (0-100)",
|
|
|
|
|
|
"frequencyDays": "Con qué frecuencia debe realizarse esta verificación (dejar vacío para basado en lotes)",
|
|
|
|
|
|
"checkPoints": "Matriz de puntos de verificación",
|
|
|
|
|
|
"parameters": "Parámetros de plantilla",
|
|
|
|
|
|
"thresholds": "Valores de umbral",
|
|
|
|
|
|
"scoringCriteria": "Criterios de puntuación personalizados"
|
2025-11-18 07:17:17 +01:00
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Agregar Proveedor",
|
|
|
|
|
|
"supplierDetails": "Detalles del Proveedor",
|
|
|
|
|
|
"subtitle": "Información esencial del proveedor",
|
|
|
|
|
|
"advancedOptionsTitle": "Opciones Avanzadas",
|
|
|
|
|
|
"advancedOptionsDescription": "Información adicional del proveedor y detalles comerciales",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Nombre del Proveedor",
|
|
|
|
|
|
"namePlaceholder": "Ej: Premium Flour Suppliers Ltd.",
|
|
|
|
|
|
"supplierCode": "Código de Proveedor",
|
|
|
|
|
|
"supplierCodePlaceholder": "SUP-001",
|
|
|
|
|
|
"supplierType": "Tipo de Proveedor",
|
|
|
|
|
|
"supplierTypeTooltip": "Categoría de productos/servicios que proporciona este proveedor",
|
|
|
|
|
|
"status": "Estado",
|
|
|
|
|
|
"paymentTerms": "Términos de Pago",
|
|
|
|
|
|
"currency": "Moneda",
|
|
|
|
|
|
"currencyPlaceholder": "EUR",
|
|
|
|
|
|
"leadTime": "Tiempo de Entrega Estándar (días)",
|
|
|
|
|
|
"leadTimeTooltip": "Tiempo típico de entrega desde el pedido hasta la entrega",
|
|
|
|
|
|
"contactPerson": "Persona de Contacto",
|
|
|
|
|
|
"contactPersonPlaceholder": "Nombre del contacto",
|
|
|
|
|
|
"email": "Correo Electrónico",
|
|
|
|
|
|
"emailPlaceholder": "contacto@proveedor.com",
|
|
|
|
|
|
"phone": "Teléfono",
|
|
|
|
|
|
"phonePlaceholder": "+1 234 567 8900",
|
|
|
|
|
|
"mobile": "Móvil",
|
|
|
|
|
|
"mobilePlaceholder": "+1 234 567 8900",
|
|
|
|
|
|
"taxId": "Identificación Fiscal",
|
|
|
|
|
|
"taxIdPlaceholder": "NIF/CIF",
|
|
|
|
|
|
"registrationNumber": "Número de Registro",
|
|
|
|
|
|
"registrationNumberPlaceholder": "Número de registro mercantil",
|
|
|
|
|
|
"website": "Sitio Web",
|
|
|
|
|
|
"websitePlaceholder": "https://www.proveedor.com",
|
|
|
|
|
|
"addressLine1": "Dirección - Línea 1",
|
|
|
|
|
|
"addressLine1Placeholder": "Dirección de calle",
|
|
|
|
|
|
"addressLine2": "Dirección - Línea 2",
|
|
|
|
|
|
"addressLine2Placeholder": "Suite, edificio, etc.",
|
|
|
|
|
|
"city": "Ciudad",
|
|
|
|
|
|
"cityPlaceholder": "Ciudad",
|
|
|
|
|
|
"state": "Estado/Provincia",
|
|
|
|
|
|
"statePlaceholder": "Estado",
|
|
|
|
|
|
"postalCode": "Código Postal",
|
|
|
|
|
|
"postalCodePlaceholder": "Código postal",
|
|
|
|
|
|
"country": "País",
|
|
|
|
|
|
"countryPlaceholder": "País",
|
|
|
|
|
|
"creditLimit": "Límite de Crédito",
|
|
|
|
|
|
"creditLimitPlaceholder": "10000.00",
|
|
|
|
|
|
"minOrderAmount": "Cantidad Mínima de Pedido",
|
|
|
|
|
|
"minOrderAmountPlaceholder": "100.00",
|
|
|
|
|
|
"deliveryArea": "Área de Entrega",
|
|
|
|
|
|
"deliveryAreaPlaceholder": "Ej: Área Metropolitana de Madrid",
|
|
|
|
|
|
"certifications": "Certificaciones",
|
|
|
|
|
|
"certificationsPlaceholder": "Ej: ISO 9001, HACCP, Orgánico (separado por comas)",
|
|
|
|
|
|
"specializations": "Especializaciones",
|
|
|
|
|
|
"specializationsPlaceholder": "Ej: Harinas orgánicas, Productos sin gluten (separado por comas)",
|
|
|
|
|
|
"notes": "Notas",
|
|
|
|
|
|
"notesPlaceholder": "Notas adicionales sobre este proveedor...",
|
|
|
|
|
|
"preferredSupplier": "Proveedor Preferido",
|
|
|
|
|
|
"autoApproveOrders": "Auto-aprobar Pedidos"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplierTypes": {
|
|
|
|
|
|
"ingredients": "Ingredientes",
|
|
|
|
|
|
"packaging": "Embalaje",
|
|
|
|
|
|
"equipment": "Equipo",
|
|
|
|
|
|
"services": "Servicios",
|
|
|
|
|
|
"utilities": "Servicios Públicos",
|
|
|
|
|
|
"multi": "Múltiple"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"active": "Activo",
|
|
|
|
|
|
"inactive": "Inactivo",
|
|
|
|
|
|
"pending_approval": "Pendiente de Aprobación",
|
|
|
|
|
|
"suspended": "Suspendido",
|
|
|
|
|
|
"blacklisted": "En Lista Negra"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentTerms": {
|
|
|
|
|
|
"cod": "Contra Reembolso",
|
|
|
|
|
|
"net_15": "Neto 15",
|
|
|
|
|
|
"net_30": "Neto 30",
|
|
|
|
|
|
"net_45": "Neto 45",
|
|
|
|
|
|
"net_60": "Neto 60",
|
|
|
|
|
|
"prepaid": "Prepago",
|
|
|
|
|
|
"credit_terms": "Términos de Crédito"
|
|
|
|
|
|
},
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"supplierDetails": "Detalles del Proveedor",
|
|
|
|
|
|
"supplierDetailsDescription": "Información esencial del proveedor"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"supplierCreatedSuccessfully": "Proveedor creado exitosamente",
|
|
|
|
|
|
"errorCreatingSupplier": "Error al crear el proveedor"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Agregar Receta",
|
|
|
|
|
|
"recipeDetails": "Detalles de la Receta",
|
|
|
|
|
|
"recipeDetailsDescription": "Información esencial sobre tu receta",
|
|
|
|
|
|
"ingredients": "Ingredientes",
|
|
|
|
|
|
"subtitle": "Información esencial sobre tu receta",
|
|
|
|
|
|
"advancedOptionsTitle": "Opciones Avanzadas",
|
|
|
|
|
|
"advancedOptionsDescription": "Campos opcionales para gestión detallada de recetas",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Nombre de la Receta",
|
|
|
|
|
|
"namePlaceholder": "Ej: Baguette Tradicional",
|
|
|
|
|
|
"category": "Categoría",
|
|
|
|
|
|
"finishedProduct": "Producto Terminado",
|
|
|
|
|
|
"finishedProductTooltip": "El producto final que produce esta receta. Debe crearse primero en el inventario.",
|
|
|
|
|
|
"selectProduct": "Seleccionar producto...",
|
|
|
|
|
|
"yieldQuantity": "Cantidad de Rendimiento",
|
|
|
|
|
|
"yieldUnit": "Unidad de Rendimiento",
|
|
|
|
|
|
"prepTime": "Tiempo de Preparación (minutos)",
|
|
|
|
|
|
"prepTimePlaceholder": "30",
|
|
|
|
|
|
"cookTime": "Tiempo de Cocción (minutos)",
|
|
|
|
|
|
"cookTimePlaceholder": "45",
|
|
|
|
|
|
"restTime": "Tiempo de Reposo (minutos)",
|
|
|
|
|
|
"restTimeTooltip": "Tiempo para levar, enfriar o reposar",
|
|
|
|
|
|
"restTimePlaceholder": "60",
|
|
|
|
|
|
"totalTime": "Tiempo Total (minutos)",
|
|
|
|
|
|
"totalTimePlaceholder": "135",
|
|
|
|
|
|
"instructions": "Instrucciones",
|
|
|
|
|
|
"instructionsPlaceholder": "Instrucciones de preparación paso a paso...",
|
|
|
|
|
|
"recipeCode": "Código/SKU de Receta",
|
|
|
|
|
|
"recipeCodePlaceholder": "RCP-001",
|
|
|
|
|
|
"version": "Versión",
|
|
|
|
|
|
"versionPlaceholder": "1.0",
|
|
|
|
|
|
"difficulty": "Nivel de Dificultad (1-5)",
|
|
|
|
|
|
"difficultyTooltip": "1 = Muy Fácil, 5 = Nivel Experto",
|
|
|
|
|
|
"servesCount": "Número de Porciones",
|
|
|
|
|
|
"servesCountPlaceholder": "12",
|
|
|
|
|
|
"batchSizeMultiplier": "Multiplicador de Tamaño de Lote",
|
|
|
|
|
|
"batchSizeMultiplierTooltip": "Factor de escalado predeterminado para producción en lote",
|
|
|
|
|
|
"batchSizeMultiplierPlaceholder": "1.0",
|
|
|
|
|
|
"minBatchSize": "Tamaño Mínimo de Lote",
|
|
|
|
|
|
"minBatchSizePlaceholder": "1",
|
|
|
|
|
|
"maxBatchSize": "Tamaño Máximo de Lote",
|
|
|
|
|
|
"maxBatchSizePlaceholder": "100",
|
|
|
|
|
|
"optimalTemp": "Temperatura Óptima de Producción (°C)",
|
|
|
|
|
|
"optimalTempPlaceholder": "22",
|
|
|
|
|
|
"optimalHumidity": "Humedad Óptima (%)",
|
|
|
|
|
|
"optimalHumidityPlaceholder": "65",
|
|
|
|
|
|
"targetMargin": "Margen Objetivo (%)",
|
|
|
|
|
|
"targetMarginPlaceholder": "50",
|
|
|
|
|
|
"description": "Descripción",
|
|
|
|
|
|
"descriptionPlaceholder": "Descripción detallada de la receta...",
|
|
|
|
|
|
"prepNotes": "Notas de Preparación",
|
|
|
|
|
|
"prepNotesPlaceholder": "Consejos y notas para la preparación...",
|
|
|
|
|
|
"storageInstructions": "Instrucciones de Almacenamiento",
|
|
|
|
|
|
"storageInstructionsPlaceholder": "Cómo almacenar el producto terminado...",
|
|
|
|
|
|
"allergens": "Alérgenos",
|
|
|
|
|
|
"allergensPlaceholder": "Ej: gluten, lácteos, huevos (separado por comas)",
|
|
|
|
|
|
"dietaryTags": "Etiquetas Dietéticas",
|
|
|
|
|
|
"dietaryTagsPlaceholder": "Ej: vegano, sin gluten, orgánico (separado por comas)",
|
|
|
|
|
|
"seasonalItem": "Artículo Estacional",
|
|
|
|
|
|
"signatureItem": "Artículo Insignia",
|
|
|
|
|
|
"seasonStartMonth": "Mes de Inicio de Temporada",
|
|
|
|
|
|
"seasonStartMonthPlaceholder": "Seleccionar mes...",
|
|
|
|
|
|
"seasonEndMonth": "Mes de Fin de Temporada",
|
|
|
|
|
|
"seasonEndMonthPlaceholder": "Seleccionar mes..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"categories": {
|
|
|
|
|
|
"bread": "Pan",
|
|
|
|
|
|
"pastries": "Pastelería",
|
|
|
|
|
|
"cakes": "Pasteles",
|
|
|
|
|
|
"cookies": "Galletas",
|
|
|
|
|
|
"muffins": "Muffins",
|
|
|
|
|
|
"sandwiches": "Sándwiches",
|
|
|
|
|
|
"seasonal": "Estacional",
|
|
|
|
|
|
"other": "Otro"
|
|
|
|
|
|
},
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"units": "Unidades",
|
|
|
|
|
|
"pieces": "Piezas",
|
|
|
|
|
|
"kg": "Kilogramos (kg)",
|
|
|
|
|
|
"g": "Gramos (g)",
|
|
|
|
|
|
"l": "Litros (l)",
|
|
|
|
|
|
"ml": "Mililitros (ml)",
|
|
|
|
|
|
"cups": "Tazas",
|
|
|
|
|
|
"tablespoons": "Cucharadas",
|
|
|
|
|
|
"teaspoons": "Cucharaditas"
|
|
|
|
|
|
},
|
|
|
|
|
|
"ingredients": {
|
|
|
|
|
|
"title": "Ingredientes",
|
|
|
|
|
|
"noIngredientsAdded": "No se agregaron ingredientes",
|
|
|
|
|
|
"clickToBegin": "Haz clic en \"Agregar Ingrediente\" para comenzar",
|
|
|
|
|
|
"ingredient": "Ingrediente",
|
|
|
|
|
|
"ingredientPlaceholder": "Seleccionar...",
|
|
|
|
|
|
"quantity": "Cantidad",
|
|
|
|
|
|
"unit": "Unidad",
|
|
|
|
|
|
"notes": "Notas",
|
|
|
|
|
|
"notesPlaceholder": "Opcional",
|
|
|
|
|
|
"removeIngredient": "Eliminar ingrediente",
|
|
|
|
|
|
"addIngredient": "Agregar Ingrediente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"qualityTemplates": {
|
|
|
|
|
|
"title": "Plantillas de Calidad (Opcional)",
|
|
|
|
|
|
"subtitle": "Selecciona plantillas de control de calidad para aplicar a esta receta",
|
|
|
|
|
|
"errorLoading": "Error al cargar plantillas de calidad",
|
|
|
|
|
|
"loading": "Cargando plantillas...",
|
|
|
|
|
|
"noTemplates": "No hay plantillas de calidad disponibles",
|
|
|
|
|
|
"createFromWizard": "Puedes crear plantillas desde el asistente principal",
|
|
|
|
|
|
"required": "Requerido",
|
|
|
|
|
|
"type": "Tipo:",
|
|
|
|
|
|
"everyXDays": "Cada X días",
|
|
|
|
|
|
"templatesSelected": "plantilla(s) seleccionada(s)"
|
|
|
|
|
|
},
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"recipeDetails": "Detalles de la Receta",
|
|
|
|
|
|
"recipeDetailsDescription": "Nombre, categoría, rendimiento",
|
|
|
|
|
|
"ingredients": "Ingredientes",
|
|
|
|
|
|
"ingredientsDescription": "Selección y cantidades",
|
|
|
|
|
|
"qualityTemplates": "Plantillas de Calidad",
|
|
|
|
|
|
"qualityTemplatesDescription": "Controles de calidad aplicables"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorGettingTenant": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"creatingRecipe": "Creando receta...",
|
|
|
|
|
|
"createRecipe": "Crear Receta",
|
|
|
|
|
|
"successCreate": "Receta creada exitosamente",
|
|
|
|
|
|
"errorCreate": "Error al crear la receta"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Agregar Cliente",
|
|
|
|
|
|
"customerDetails": "Detalles del Cliente",
|
|
|
|
|
|
"subtitle": "Información esencial del cliente",
|
|
|
|
|
|
"advancedOptionsTitle": "Opciones Avanzadas",
|
|
|
|
|
|
"advancedOptionsDescription": "Información adicional del cliente y términos comerciales",
|
|
|
|
|
|
"tooltips": {
|
|
|
|
|
|
"customerCode": "Identificador único para este cliente. Auto-generado pero editable."
|
|
|
|
|
|
},
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Nombre del Cliente",
|
|
|
|
|
|
"namePlaceholder": "Ej: Restaurante El Molino",
|
|
|
|
|
|
"customerCode": "Código de Cliente",
|
|
|
|
|
|
"customerCodePlaceholder": "CUST-001",
|
|
|
|
|
|
"customerType": "Tipo de Cliente",
|
|
|
|
|
|
"email": "Correo Electrónico",
|
|
|
|
|
|
"emailPlaceholder": "contacto@empresa.com",
|
|
|
|
|
|
"phone": "Teléfono",
|
|
|
|
|
|
"phonePlaceholder": "+1 234 567 8900",
|
|
|
|
|
|
"country": "País",
|
|
|
|
|
|
"countryPlaceholder": "US",
|
|
|
|
|
|
"businessName": "Nombre Comercial",
|
|
|
|
|
|
"businessNamePlaceholder": "Nombre legal del negocio",
|
|
|
|
|
|
"addressLine1": "Dirección - Línea 1",
|
|
|
|
|
|
"addressLine1Placeholder": "Dirección de calle",
|
|
|
|
|
|
"addressLine2": "Dirección - Línea 2",
|
|
|
|
|
|
"addressLine2Placeholder": "Apartamento, suite, etc.",
|
|
|
|
|
|
"city": "Ciudad",
|
|
|
|
|
|
"cityPlaceholder": "Ciudad",
|
|
|
|
|
|
"state": "Estado/Provincia",
|
|
|
|
|
|
"statePlaceholder": "Estado",
|
|
|
|
|
|
"postalCode": "Código Postal",
|
|
|
|
|
|
"postalCodePlaceholder": "12345",
|
|
|
|
|
|
"taxId": "Identificación Fiscal",
|
|
|
|
|
|
"taxIdPlaceholder": "Número de identificación fiscal",
|
|
|
|
|
|
"businessLicense": "Licencia Comercial",
|
|
|
|
|
|
"businessLicensePlaceholder": "Número de licencia comercial",
|
|
|
|
|
|
"paymentTerms": "Términos de Pago",
|
|
|
|
|
|
"creditLimit": "Límite de Crédito (€)",
|
|
|
|
|
|
"creditLimitPlaceholder": "5000.00",
|
|
|
|
|
|
"discountPercentage": "Porcentaje de Descuento (%)",
|
|
|
|
|
|
"discountPercentagePlaceholder": "10",
|
|
|
|
|
|
"customerSegment": "Segmento de Cliente",
|
|
|
|
|
|
"priorityLevel": "Nivel de Prioridad",
|
|
|
|
|
|
"preferredDeliveryMethod": "Método de Entrega Preferido",
|
|
|
|
|
|
"specialInstructions": "Instrucciones Especiales",
|
|
|
|
|
|
"specialInstructionsPlaceholder": "Notas o instrucciones especiales para este cliente..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerTypes": {
|
|
|
|
|
|
"individual": "Individual",
|
|
|
|
|
|
"business": "Empresa",
|
|
|
|
|
|
"central_bakery": "Panadería Central"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentTerms": {
|
|
|
|
|
|
"immediate": "Inmediato",
|
|
|
|
|
|
"net_30": "Neto 30",
|
|
|
|
|
|
"net_60": "Neto 60"
|
|
|
|
|
|
},
|
|
|
|
|
|
"segments": {
|
|
|
|
|
|
"vip": "VIP",
|
|
|
|
|
|
"regular": "Regular",
|
|
|
|
|
|
"wholesale": "Mayorista"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"high": "Alta",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"low": "Baja"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryMethods": {
|
|
|
|
|
|
"delivery": "Entrega a Domicilio",
|
|
|
|
|
|
"pickup": "Recogida",
|
|
|
|
|
|
"shipping": "Envío"
|
|
|
|
|
|
},
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"customerDetails": "Detalles del Cliente",
|
|
|
|
|
|
"customerDetailsDescription": "Información de contacto y negocio"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"customerCreatedSuccessfully": "Cliente creado exitosamente",
|
|
|
|
|
|
"errorCreatingCustomer": "Error al crear el cliente"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Agregar Maquinaria",
|
|
|
|
|
|
"equipmentDetails": "Detalles de la Maquinaria",
|
|
|
|
|
|
"subtitle": "Equipo de Panadería",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"type": "Tipo de Equipo",
|
|
|
|
|
|
"brand": "Marca/Modelo",
|
|
|
|
|
|
"brandPlaceholder": "Ej: Rational SCC 101",
|
|
|
|
|
|
"model": "Modelo",
|
|
|
|
|
|
"location": "Ubicación",
|
|
|
|
|
|
"locationPlaceholder": "Ej: Cocina principal",
|
|
|
|
|
|
"status": "Estado",
|
|
|
|
|
|
"purchaseDate": "Fecha de Compra"
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipmentTypes": {
|
|
|
|
|
|
"oven": "Horno",
|
|
|
|
|
|
"mixer": "Amasadora",
|
|
|
|
|
|
"proofer": "Fermentadora",
|
|
|
|
|
|
"refrigerator": "Refrigerador",
|
|
|
|
|
|
"other": "Otro"
|
|
|
|
|
|
},
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"equipmentDetails": "Detalles del Equipo",
|
|
|
|
|
|
"equipmentDetailsDescription": "Tipo, modelo, ubicación"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorGettingTenant": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"noBrand": "Sin marca",
|
|
|
|
|
|
"successCreate": "Equipo creado exitosamente",
|
|
|
|
|
|
"errorCreate": "Error al crear el equipo"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"teamMember": {
|
|
|
|
|
|
"title": "Agregar Miembro del Equipo",
|
|
|
|
|
|
"memberDetails": "Miembro del Equipo",
|
|
|
|
|
|
"roleAndPermissions": "Rol y Permisos",
|
|
|
|
|
|
"specificPermissions": "Permisos Específicos",
|
|
|
|
|
|
"subtitle": "Miembro del Equipo",
|
|
|
|
|
|
"permissionsTitle": "Rol y Permisos",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"memberDetails": "Datos Personales",
|
|
|
|
|
|
"memberDetailsDescription": "Nombre, contacto, posición",
|
|
|
|
|
|
"roleAndPermissions": "Rol y Permisos",
|
|
|
|
|
|
"roleAndPermissionsDescription": "Accesos al sistema"
|
|
|
|
|
|
},
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"fullName": "Nombre Completo",
|
|
|
|
|
|
"fullNamePlaceholder": "Ej: Juan García",
|
|
|
|
|
|
"email": "Correo Electrónico",
|
|
|
|
|
|
"emailPlaceholder": "juan@panaderia.com",
|
|
|
|
|
|
"phone": "Teléfono",
|
|
|
|
|
|
"phonePlaceholder": "+34 123 456 789",
|
|
|
|
|
|
"position": "Posición",
|
|
|
|
|
|
"employmentType": "Tipo de Empleo",
|
|
|
|
|
|
"systemRole": "Rol del Sistema",
|
|
|
|
|
|
"specificPermissions": "Permisos Específicos"
|
|
|
|
|
|
},
|
|
|
|
|
|
"positions": {
|
|
|
|
|
|
"baker": "Panadero",
|
|
|
|
|
|
"pastryChef": "Pastelero",
|
|
|
|
|
|
"manager": "Gerente",
|
|
|
|
|
|
"sales": "Ventas",
|
|
|
|
|
|
"delivery": "Repartidor"
|
|
|
|
|
|
},
|
|
|
|
|
|
"employmentTypes": {
|
|
|
|
|
|
"fullTime": "Tiempo Completo",
|
|
|
|
|
|
"partTime": "Medio Tiempo",
|
|
|
|
|
|
"contractor": "Contratista"
|
|
|
|
|
|
},
|
|
|
|
|
|
"roles": {
|
|
|
|
|
|
"admin": "Administrador",
|
|
|
|
|
|
"manager": "Gerente",
|
|
|
|
|
|
"staff": "Personal",
|
|
|
|
|
|
"viewOnly": "Solo Lectura"
|
|
|
|
|
|
},
|
|
|
|
|
|
"permissions": {
|
|
|
|
|
|
"canManageInventory": "Gestionar Inventario",
|
|
|
|
|
|
"canViewRecipes": "Ver Recetas",
|
|
|
|
|
|
"canCreateOrders": "Crear Pedidos",
|
|
|
|
|
|
"canViewFinancial": "Ver Datos Financieros"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorGettingTenant": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"successCreate": "Miembro del equipo agregado exitosamente",
|
|
|
|
|
|
"errorCreate": "Error al crear el miembro del equipo"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"salesEntry": {
|
|
|
|
|
|
"title": "Registro de Ventas",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"entryMethod": "Método de Entrada",
|
|
|
|
|
|
"entryMethodDescription": "Elige cómo registrar las ventas",
|
|
|
|
|
|
"manualEntry": "Ingresar Datos",
|
|
|
|
|
|
"manualEntryDescription": "Registra los detalles de la venta",
|
|
|
|
|
|
"fileUpload": "Cargar Archivo",
|
|
|
|
|
|
"fileUploadDescription": "Importa ventas desde archivo",
|
|
|
|
|
|
"review": "Revisar",
|
|
|
|
|
|
"reviewDescription": "Confirma los datos antes de guardar"
|
|
|
|
|
|
},
|
|
|
|
|
|
"entryMethod": {
|
|
|
|
|
|
"title": "¿Cómo deseas registrar las ventas?",
|
|
|
|
|
|
"subtitle": "Elige el método que mejor se adapte a tus necesidades",
|
|
|
|
|
|
"manual": {
|
|
|
|
|
|
"title": "Entrada Manual",
|
|
|
|
|
|
"description": "Ingresa una o varias ventas de forma individual",
|
|
|
|
|
|
"benefits": {
|
|
|
|
|
|
"1": "Ideal para totales diarios",
|
|
|
|
|
|
"2": "Control detallado por venta",
|
|
|
|
|
|
"3": "Fácil y rápido"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"file": {
|
|
|
|
|
|
"title": "Cargar Archivo",
|
|
|
|
|
|
"description": "Importa desde Excel o CSV",
|
|
|
|
|
|
"recommended": "⭐ Recomendado para históricos",
|
|
|
|
|
|
"benefits": {
|
|
|
|
|
|
"1": "Ideal para datos históricos",
|
|
|
|
|
|
"2": "Carga masiva (cientos de registros)",
|
|
|
|
|
|
"3": "Ahorra tiempo significativo"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"manualEntry": {
|
|
|
|
|
|
"title": "Registrar Venta Manual",
|
|
|
|
|
|
"subtitle": "Ingresa los detalles de la venta",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"saleDate": "Fecha de Venta",
|
|
|
|
|
|
"paymentMethod": "Método de Pago",
|
|
|
|
|
|
"notes": "Notas (Opcional)",
|
|
|
|
|
|
"notesPlaceholder": "Información adicional sobre esta venta..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"products": {
|
|
|
|
|
|
"title": "Productos Vendidos",
|
|
|
|
|
|
"addProduct": "+ Agregar Producto",
|
|
|
|
|
|
"loading": "Cargando productos...",
|
|
|
|
|
|
"noFinishedProducts": "No hay productos terminados disponibles",
|
|
|
|
|
|
"addToInventory": "Agrega productos al inventario primero",
|
|
|
|
|
|
"noProductsAdded": "No hay productos agregados",
|
|
|
|
|
|
"clickToBegin": "Haz clic en 'Agregar Producto' para comenzar",
|
|
|
|
|
|
"selectProduct": "Seleccionar producto...",
|
|
|
|
|
|
"quantity": "Cant.",
|
|
|
|
|
|
"price": "Precio",
|
|
|
|
|
|
"removeProduct": "Eliminar producto",
|
|
|
|
|
|
"total": "Total:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"fileUpload": {
|
|
|
|
|
|
"title": "Cargar Archivo de Ventas",
|
|
|
|
|
|
"subtitle": "Importa tus ventas desde Excel o CSV",
|
|
|
|
|
|
"downloadTemplate": "Descargar Plantilla CSV",
|
|
|
|
|
|
"downloading": "Descargando...",
|
|
|
|
|
|
"dragDrop": {
|
|
|
|
|
|
"title": "Arrastra un archivo aquí",
|
|
|
|
|
|
"subtitle": "o haz clic para seleccionar",
|
|
|
|
|
|
"button": "Seleccionar Archivo",
|
|
|
|
|
|
"supportedFormats": "Formatos soportados: CSV, Excel (.xlsx, .xls)"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validated": {
|
|
|
|
|
|
"title": "✓ Archivo validado correctamente",
|
|
|
|
|
|
"recordsFound": "Registros encontrados:",
|
|
|
|
|
|
"validRecords": "Registros válidos:",
|
|
|
|
|
|
"errors": "Errores:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validateButton": "Validar Archivo",
|
|
|
|
|
|
"validating": "Validando...",
|
|
|
|
|
|
"importButton": "Importar Datos",
|
|
|
|
|
|
"importing": "Importando...",
|
|
|
|
|
|
"instructions": {
|
|
|
|
|
|
"title": "El archivo debe contener las columnas:",
|
|
|
|
|
|
"columns": "fecha, producto, cantidad, precio_unitario, método_pago"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"title": "Revisar y Confirmar",
|
|
|
|
|
|
"subtitle": "Verifica que toda la información sea correcta",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"date": "Fecha:",
|
|
|
|
|
|
"paymentMethod": "Método de Pago:",
|
|
|
|
|
|
"products": "Productos",
|
|
|
|
|
|
"total": "Total:",
|
|
|
|
|
|
"notes": "Notas:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"imported": {
|
|
|
|
|
|
"title": "✓ Archivo importado correctamente",
|
|
|
|
|
|
"recordsImported": "Registros importados:",
|
|
|
|
|
|
"recordsFailed": "Registros fallidos:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentMethods": {
|
|
|
|
|
|
"cash": "Efectivo",
|
|
|
|
|
|
"card": "Tarjeta",
|
|
|
|
|
|
"mobile": "Pago Móvil",
|
|
|
|
|
|
"transfer": "Transferencia",
|
|
|
|
|
|
"other": "Otro"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"errorLoadingProducts": "Error al cargar productos",
|
|
|
|
|
|
"salesEntryCreatedSuccessfully": "Entrada de ventas creada exitosamente",
|
|
|
|
|
|
"errorCreatingSalesEntry": "Error al crear la entrada de ventas",
|
|
|
|
|
|
"errorValidatingFile": "Error al validar el archivo",
|
|
|
|
|
|
"errorImportingFile": "Error al importar el archivo",
|
|
|
|
|
|
"fileValidatedSuccessfully": "Archivo validado exitosamente",
|
|
|
|
|
|
"fileImportedSuccessfully": "Archivo importado exitosamente"
|
|
|
|
|
|
}
|
2025-12-25 20:51:03 +01:00
|
|
|
|
},
|
|
|
|
|
|
"purchaseOrder": {
|
|
|
|
|
|
"title": "Agregar Orden de Compra",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"supplierSelection": "Selección de Proveedor",
|
|
|
|
|
|
"supplierSelectionDescription": "Elige el proveedor",
|
|
|
|
|
|
"orderItems": "Artículos de la Orden",
|
|
|
|
|
|
"orderItemsDescription": "Productos a ordenar",
|
|
|
|
|
|
"deliveryDetails": "Detalles de Entrega",
|
|
|
|
|
|
"deliveryDetailsDescription": "Fecha y notas de entrega"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplierSelection": {
|
|
|
|
|
|
"title": "Seleccionar Proveedor",
|
|
|
|
|
|
"subtitle": "Elige el proveedor para esta orden de compra",
|
|
|
|
|
|
"searchPlaceholder": "Buscar proveedor por nombre o código...",
|
|
|
|
|
|
"loading": "Cargando proveedores...",
|
|
|
|
|
|
"error": "Error al cargar proveedores",
|
|
|
|
|
|
"noSuppliersFound": "No se encontraron proveedores",
|
|
|
|
|
|
"tryDifferentSearch": "Intenta con una búsqueda diferente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"title": "Artículos de la Orden",
|
|
|
|
|
|
"titleHeader": "Productos a Comprar",
|
|
|
|
|
|
"subtitle": "Selecciona los productos a ordenar",
|
|
|
|
|
|
"addItem": "Agregar Artículo",
|
|
|
|
|
|
"addProduct": "Agregar Producto",
|
|
|
|
|
|
"removeItem": "Eliminar artículo",
|
|
|
|
|
|
"noItemsAdded": "No se han agregado artículos",
|
|
|
|
|
|
"clickToBegin": "Haz clic en 'Agregar Artículo' para comenzar",
|
|
|
|
|
|
"clickToBeginProduct": "Haz clic en \"Agregar Producto\" para comenzar",
|
|
|
|
|
|
"supplier": "Proveedor",
|
|
|
|
|
|
"orderTotal": "Total de la Orden",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"ingredient": "Ingrediente",
|
|
|
|
|
|
"ingredientPlaceholder": "Seleccionar ingrediente...",
|
|
|
|
|
|
"quantity": "Cantidad",
|
|
|
|
|
|
"unitPrice": "Precio Unitario (€)",
|
|
|
|
|
|
"subtotal": "Subtotal",
|
|
|
|
|
|
"notes": "Notas",
|
|
|
|
|
|
"notesPlaceholder": "Notas adicionales para este artículo..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"loading": "Cargando ingredientes...",
|
|
|
|
|
|
"noIngredients": "No hay ingredientes disponibles",
|
|
|
|
|
|
"addToInventory": "Agrega ingredientes al inventario primero",
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"kg": "Kilogramos",
|
|
|
|
|
|
"g": "Gramos",
|
|
|
|
|
|
"l": "Litros",
|
|
|
|
|
|
"ml": "Mililitros",
|
|
|
|
|
|
"units": "Unidades",
|
|
|
|
|
|
"boxes": "Cajas",
|
|
|
|
|
|
"bags": "Bolsas"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryDetails": {
|
|
|
|
|
|
"title": "Detalles de Entrega",
|
|
|
|
|
|
"titleHeader": "Detalles de la Orden",
|
|
|
|
|
|
"subtitle": "Configura la fecha de entrega y notas adicionales",
|
|
|
|
|
|
"subtitleHeader": "Configura fecha de entrega y prioridad",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"expectedDeliveryDate": "Fecha de Entrega Esperada",
|
|
|
|
|
|
"notes": "Notas de la Orden",
|
|
|
|
|
|
"notesPlaceholder": "Instrucciones especiales, requisitos de entrega, etc.",
|
|
|
|
|
|
"instructionsPlaceholder": "Instrucciones especiales para el proveedor...",
|
|
|
|
|
|
"orderNumber": "Número de Orden",
|
|
|
|
|
|
"orderNumberTooltip": "Se generará automáticamente al crear la orden",
|
|
|
|
|
|
"status": "Estado",
|
|
|
|
|
|
"priority": "Prioridad"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderSummary": {
|
|
|
|
|
|
"title": "Resumen de la Orden",
|
|
|
|
|
|
"supplier": "Proveedor:",
|
|
|
|
|
|
"items": "Artículos:",
|
|
|
|
|
|
"total": "Total:",
|
|
|
|
|
|
"deliveryDate": "Entrega Esperada:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"draft": "Borrador",
|
|
|
|
|
|
"pending": "Pendiente",
|
|
|
|
|
|
"approved": "Aprobado",
|
|
|
|
|
|
"ordered": "Ordenado",
|
|
|
|
|
|
"received": "Recibido",
|
|
|
|
|
|
"cancelled": "Cancelado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Baja",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "Alta",
|
|
|
|
|
|
"urgent": "Urgente",
|
|
|
|
|
|
"critical": "Crítica"
|
|
|
|
|
|
},
|
|
|
|
|
|
"advancedOptions": {
|
|
|
|
|
|
"title": "Opciones Avanzadas",
|
|
|
|
|
|
"description": "Información financiera adicional"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"errorLoadingSuppliers": "Error al cargar proveedores",
|
|
|
|
|
|
"errorLoadingIngredients": "Error al cargar ingredientes",
|
|
|
|
|
|
"purchaseOrderCreatedSuccessfully": "Orden de compra creada exitosamente",
|
|
|
|
|
|
"errorCreatingPurchaseOrder": "Error al crear la orden de compra",
|
|
|
|
|
|
"selectSupplier": "Por favor selecciona un proveedor",
|
|
|
|
|
|
"addAtLeastOneItem": "Agrega al menos un artículo a la orden"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validation": {
|
|
|
|
|
|
"selectSupplier": "Debes seleccionar un proveedor",
|
|
|
|
|
|
"addProduct": "Debes agregar al menos un producto",
|
|
|
|
|
|
"invalidItems": "Todos los productos deben tener ingrediente, cantidad mayor a 0 y precio mayor a 0",
|
|
|
|
|
|
"deliveryDate": "Debes especificar una fecha de entrega"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stepTitles": {
|
|
|
|
|
|
"selectSupplier": "Seleccionar Proveedor",
|
|
|
|
|
|
"addProducts": "Agregar Productos",
|
|
|
|
|
|
"orderDetails": "Detalles de la Orden",
|
|
|
|
|
|
"reviewConfirm": "Revisar y Confirmar"
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"unspecified": "No especificada",
|
|
|
|
|
|
"noName": "Producto sin nombre"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"productionBatch": {
|
|
|
|
|
|
"title": "Agregar Lote de Producción",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"productRecipe": "Producto y Receta",
|
|
|
|
|
|
"productRecipeDescription": "Selecciona qué producir",
|
|
|
|
|
|
"timing": "Programación",
|
|
|
|
|
|
"timingDescription": "Fechas de producción",
|
|
|
|
|
|
"equipmentStaff": "Equipo y Personal",
|
|
|
|
|
|
"equipmentStaffDescription": "Recursos asignados",
|
|
|
|
|
|
"additionalDetails": "Detalles Adicionales",
|
|
|
|
|
|
"additionalDetailsDescription": "Notas y configuración"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productRecipe": {
|
|
|
|
|
|
"title": "Seleccionar Producto y Receta",
|
|
|
|
|
|
"subtitle": "Elige el producto a producir y opcionalmente una receta",
|
|
|
|
|
|
"loading": "Cargando información...",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"product": "Producto a Producir",
|
|
|
|
|
|
"productLabel": "Producto a Producir *",
|
|
|
|
|
|
"productPlaceholder": "Seleccionar producto...",
|
|
|
|
|
|
"recipe": "Receta a Utilizar (Opcional)",
|
|
|
|
|
|
"recipePlaceholder": "Sin receta específica",
|
|
|
|
|
|
"quantityToProduce": "Cantidad a Producir",
|
|
|
|
|
|
"batchNumber": "Número de Lote",
|
|
|
|
|
|
"batchNumberPlaceholder": "LOTE-001",
|
|
|
|
|
|
"batchNumberAutoPlaceholder": "Se generará automáticamente si se deja vacío"
|
|
|
|
|
|
},
|
|
|
|
|
|
"noProducts": "No hay productos disponibles",
|
|
|
|
|
|
"addToInventory": "Agrega productos al inventario primero",
|
|
|
|
|
|
"recipeDetails": {
|
|
|
|
|
|
"title": "Detalles de la Receta",
|
|
|
|
|
|
"yield": "Rendimiento:",
|
|
|
|
|
|
"prepTime": "Tiempo de Prep:",
|
|
|
|
|
|
"cookTime": "Tiempo de Cocción:",
|
|
|
|
|
|
"totalTime": "Tiempo Total:",
|
|
|
|
|
|
"ingredients": "Ingredientes:",
|
|
|
|
|
|
"minutes": "min"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"timing": {
|
|
|
|
|
|
"title": "Programación de Producción",
|
|
|
|
|
|
"subtitle": "Define las fechas de inicio y fin de producción",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"scheduledStartTime": "Fecha y Hora de Inicio",
|
|
|
|
|
|
"scheduledEndTime": "Fecha y Hora de Finalización (Opcional)",
|
|
|
|
|
|
"estimatedDuration": "Duración Estimada (minutos)",
|
|
|
|
|
|
"estimatedDurationPlaceholder": "120"
|
|
|
|
|
|
},
|
|
|
|
|
|
"summary": {
|
|
|
|
|
|
"product": "Producto:",
|
|
|
|
|
|
"quantity": "Cantidad:",
|
|
|
|
|
|
"recipe": "Receta:",
|
|
|
|
|
|
"startTime": "Inicio:",
|
|
|
|
|
|
"duration": "Duración Est.:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipmentStaff": {
|
|
|
|
|
|
"title": "Equipo y Personal",
|
|
|
|
|
|
"subtitle": "Asigna recursos para esta producción",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"assignedEquipment": "Equipo Asignado",
|
|
|
|
|
|
"assignedEquipmentPlaceholder": "Ej: Horno #1, Amasadora #2",
|
|
|
|
|
|
"equipmentExample": "Ej: oven-1, mixer-2",
|
|
|
|
|
|
"assignedStaff": "Personal Asignado",
|
|
|
|
|
|
"assignedStaffPlaceholder": "Ej: Juan García, María López",
|
|
|
|
|
|
"staffHelp": "Separar nombres con comas (Ej: Juan Pérez, María García)",
|
|
|
|
|
|
"supervisor": "Supervisor",
|
|
|
|
|
|
"supervisorPlaceholder": "Nombre del supervisor",
|
|
|
|
|
|
"orderId": "ID del pedido asociado",
|
|
|
|
|
|
"forecastId": "ID del pronóstico asociado"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"additionalDetails": {
|
|
|
|
|
|
"title": "Detalles Adicionales",
|
|
|
|
|
|
"subtitle": "Configuración opcional y notas",
|
|
|
|
|
|
"advancedOptions": {
|
|
|
|
|
|
"title": "Opciones Avanzadas",
|
|
|
|
|
|
"description": "Información adicional de producción"
|
|
|
|
|
|
},
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"priority": "Prioridad",
|
|
|
|
|
|
"status": "Estado",
|
|
|
|
|
|
"productionStage": "Etapa de Producción",
|
|
|
|
|
|
"notes": "Notas de Producción",
|
|
|
|
|
|
"notesPlaceholder": "Instrucciones especiales, observaciones, etc.",
|
|
|
|
|
|
"qualityCheckRequired": "Requiere Control de Calidad",
|
|
|
|
|
|
"qualityCheckNotes": "Notas de Control de Calidad",
|
|
|
|
|
|
"qualityCheckNotesPlaceholder": "Puntos de control específicos..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Baja",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "Alta",
|
|
|
|
|
|
"urgent": "Urgente"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"scheduled": "Programado",
|
|
|
|
|
|
"in_progress": "En Progreso",
|
|
|
|
|
|
"completed": "Completado",
|
|
|
|
|
|
"on_hold": "En Espera",
|
|
|
|
|
|
"cancelled": "Cancelado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stages": {
|
|
|
|
|
|
"mixing": "Mezclado",
|
|
|
|
|
|
"proofing": "Fermentación",
|
|
|
|
|
|
"shaping": "Formado",
|
|
|
|
|
|
"baking": "Horneado",
|
|
|
|
|
|
"cooling": "Enfriado",
|
|
|
|
|
|
"packaging": "Empaquetado",
|
|
|
|
|
|
"finishing": "Acabado"
|
|
|
|
|
|
},
|
|
|
|
|
|
"summary": {
|
|
|
|
|
|
"title": "Resumen del Lote de Producción",
|
|
|
|
|
|
"product": "Producto:",
|
|
|
|
|
|
"quantity": "Cantidad:",
|
|
|
|
|
|
"recipe": "Receta:",
|
|
|
|
|
|
"startTime": "Inicio Programado:",
|
|
|
|
|
|
"priority": "Prioridad:",
|
|
|
|
|
|
"equipment": "Equipo:",
|
|
|
|
|
|
"staff": "Personal:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "No se pudo obtener información del tenant",
|
|
|
|
|
|
"errorLoadingProducts": "Error al cargar productos",
|
|
|
|
|
|
"errorLoadingRecipes": "Error al cargar recetas",
|
|
|
|
|
|
"productionBatchCreatedSuccessfully": "Lote de producción creado exitosamente",
|
|
|
|
|
|
"errorCreatingProductionBatch": "Error al crear el lote de producción",
|
|
|
|
|
|
"selectProduct": "Por favor selecciona un producto",
|
|
|
|
|
|
"enterQuantity": "Ingresa una cantidad válida"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validation": {
|
|
|
|
|
|
"selectProduct": "Debes seleccionar un producto",
|
|
|
|
|
|
"startTime": "Debes especificar la fecha y hora de inicio",
|
|
|
|
|
|
"duration": "La duración debe ser mayor a 0 minutos",
|
|
|
|
|
|
"quantity": "La cantidad debe ser mayor a 0",
|
|
|
|
|
|
"endTime": "La fecha de fin debe ser posterior a la fecha de inicio"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stepTitles": {
|
|
|
|
|
|
"productRecipe": "Producto y Receta",
|
|
|
|
|
|
"planning": "Planificación",
|
|
|
|
|
|
"priorityResources": "Prioridad y Recursos",
|
|
|
|
|
|
"review": "Revisar y Confirmar"
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"unspecified": "No especificado",
|
|
|
|
|
|
"noRecipe": "Sin receta específica"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"itemTypeSelector": {
|
2025-12-28 22:29:27 +01:00
|
|
|
|
"title": "Seleccionar Tipo",
|
|
|
|
|
|
"description": "Elige qué deseas agregar",
|
|
|
|
|
|
"search": {
|
|
|
|
|
|
"placeholder": "Buscar por nombre o categoría...",
|
|
|
|
|
|
"noResults": "No se encontraron resultados",
|
|
|
|
|
|
"resultSingular": "resultado",
|
|
|
|
|
|
"resultPlural": "resultados"
|
|
|
|
|
|
},
|
2025-12-25 20:51:03 +01:00
|
|
|
|
"categories": {
|
|
|
|
|
|
"all": "Todos",
|
|
|
|
|
|
"daily": "Diario",
|
|
|
|
|
|
"common": "Común",
|
|
|
|
|
|
"setup": "Configuración"
|
|
|
|
|
|
},
|
|
|
|
|
|
"badges": {
|
|
|
|
|
|
"mostCommon": "⭐ Más Común",
|
|
|
|
|
|
"daily": "Diario",
|
|
|
|
|
|
"common": "Común",
|
|
|
|
|
|
"setup": "Configuración"
|
2025-12-28 22:29:27 +01:00
|
|
|
|
},
|
|
|
|
|
|
"items": {
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inventario",
|
|
|
|
|
|
"subtitle": "Agregar ingredientes o productos a tu inventario",
|
|
|
|
|
|
"keywords": ["stock", "ingredientes", "productos", "almacén"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Proveedor",
|
|
|
|
|
|
"subtitle": "Agregar un nuevo proveedor o vendedor",
|
|
|
|
|
|
"keywords": ["vendedor", "compras", "suministros"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Receta",
|
|
|
|
|
|
"subtitle": "Crear una nueva receta o fórmula",
|
|
|
|
|
|
"keywords": ["fórmula", "preparación", "ingredientes"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Maquinaria",
|
|
|
|
|
|
"subtitle": "Registrar equipo o maquinaria de panadería",
|
|
|
|
|
|
"keywords": ["horno", "amasadora", "equipo", "máquina"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"quality-template": {
|
|
|
|
|
|
"title": "Plantilla de Calidad",
|
|
|
|
|
|
"subtitle": "Crear una plantilla de control de calidad",
|
|
|
|
|
|
"keywords": ["control", "calidad", "inspección", "verificación"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer-order": {
|
|
|
|
|
|
"title": "Pedido de Cliente",
|
|
|
|
|
|
"subtitle": "Crear un nuevo pedido de cliente",
|
|
|
|
|
|
"keywords": ["pedido", "orden", "cliente", "venta"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Cliente",
|
|
|
|
|
|
"subtitle": "Agregar un nuevo cliente",
|
|
|
|
|
|
"keywords": ["cliente", "comprador", "contacto"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"team-member": {
|
|
|
|
|
|
"title": "Miembro del Equipo",
|
|
|
|
|
|
"subtitle": "Agregar un miembro del equipo o empleado",
|
|
|
|
|
|
"keywords": ["empleado", "trabajador", "personal", "staff"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"sales-entry": {
|
|
|
|
|
|
"title": "Registro de Ventas",
|
|
|
|
|
|
"subtitle": "Registrar una transacción de venta",
|
|
|
|
|
|
"keywords": ["venta", "caja", "ingreso", "transacción"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"purchase-order": {
|
|
|
|
|
|
"title": "Orden de Compra",
|
|
|
|
|
|
"subtitle": "Crear una orden de compra a proveedor",
|
|
|
|
|
|
"keywords": ["compra", "orden", "proveedor", "pedido"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"production-batch": {
|
|
|
|
|
|
"title": "Lote de Producción",
|
|
|
|
|
|
"subtitle": "Crear un nuevo lote de producción",
|
|
|
|
|
|
"keywords": ["producción", "lote", "fabricación", "elaboración"]
|
|
|
|
|
|
}
|
2025-12-25 20:51:03 +01:00
|
|
|
|
}
|
feat: Add comprehensive i18n support for wizards (en/es/eu)
INTERNATIONALIZATION: Implemented full multi-language support for wizard
components in English, Spanish, and Basque (Euskara).
IMPLEMENTATION DETAILS:
**New Translation Files Created:**
1. frontend/src/locales/en/wizards.json - English translations
2. frontend/src/locales/es/wizards.json - Spanish translations
3. frontend/src/locales/eu/wizards.json - Basque translations
**Translation Coverage:**
- Common wizard strings (optional, required, auto-generated, etc.)
- Inventory Wizard (all fields, sections, tooltips)
- Quality Template Wizard (all fields, check types, sections)
- Customer Order Wizard (all 3 steps, fields, customer types)
- Item Type Selector (all 9 item types with descriptions)
- Comprehensive tooltips for all complex fields
**Total Translation Keys:** ~200+ keys per language
**Structure:**
```
wizards:
common: {optional, required, autoGenerated, ...}
inventory: {title, fields, sections, productTypes, units, ...}
qualityTemplate: {title, fields, checkTypes, sections, ...}
customerOrder: {title, steps, customerSelection, orderItems, ...}
itemTypeSelector: {title, types, ...}
tooltips: {averageCost, lowStockThreshold, allergenInfo, ...}
```
**Integration:**
- Updated frontend/src/locales/index.ts to register 'wizards' namespace
- Added imports for wizardsEs, wizardsEn, wizardsEu
- Registered in resources for all three languages
- Added 'wizards' to namespaces array
**Documentation:**
Created comprehensive implementation guide:
- WIZARD_I18N_IMPLEMENTATION_GUIDE.md
- Complete usage examples for all wizard types
- Migration patterns for existing components
- Best practices and testing guidelines
- Step-by-step implementation checklist
**Usage Pattern:**
```typescript
import { useTranslation } from 'react-i18next';
const MyWizard = () => {
const { t } = useTranslation('wizards');
return (
<div>
<h2>{t('inventory.title')}</h2>
<label>{t('inventory.fields.name')}</label>
<input placeholder={t('inventory.fields.namePlaceholder')} />
</div>
);
};
```
**Translation Quality:**
- English: Native professional translations
- Spanish: Professional translations with bakery-specific terminology
- Basque: Professional Euskara translations maintaining formal tone
**Benefits:**
✅ Full multi-language support (en/es/eu)
✅ Consistent terminology across all wizards
✅ Easy maintenance - all strings in JSON
✅ Type-safe with i18next TypeScript support
✅ Scalable - easy to add new languages
✅ Works with existing language switcher
✅ Comprehensive coverage of all wizard fields
✅ Professional translations for bakery domain
**Next Steps:**
Individual wizard components need to be updated to use these translations
following the patterns documented in WIZARD_I18N_IMPLEMENTATION_GUIDE.md
This establishes the foundation for complete multilingual wizard support.
Components can be migrated incrementally using the provided examples.
2025-11-10 12:28:03 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|