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": "Aukerakoa",
|
|
|
|
|
|
"required": "Beharrezkoa",
|
|
|
|
|
|
"autoGenerated": "Automatikoki sortu",
|
|
|
|
|
|
"leaveEmptyForAutoGeneration": "Utzi hutsik automatikoki sortzeko",
|
|
|
|
|
|
"readOnly": "Irakurtzeko soilik - Automatikoki sortua",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Automatikoki sortuko da",
|
|
|
|
|
|
"autoGeneratedOnSave": "Automatikoki sortua gordetzean"
|
|
|
|
|
|
},
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inbentarioa Gehitu",
|
|
|
|
|
|
"inventoryDetails": "Inbentario Elementuaren Xehetasunak",
|
|
|
|
|
|
"fillRequiredInfo": "Bete beharrezko informazioa inbentario elementu bat sortzeko",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"summary": "Laburpena",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"productType": "Produktu Mota",
|
|
|
|
|
|
"basicInfo": "Oinarrizko Informazioa",
|
|
|
|
|
|
"stockConfig": "Stock Konfigurazioa"
|
|
|
|
|
|
},
|
|
|
|
|
|
"typeDescriptions": {
|
|
|
|
|
|
"ingredient": "Errezetetan erabiltzen diren lehengaiak eta osagaiak",
|
|
|
|
|
|
"finished_product": "Salmentarako edo kontsumorako prest dauden produktu finalak"
|
|
|
|
|
|
},
|
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": "Izena",
|
|
|
|
|
|
"namePlaceholder": "Adib: Erabilera Anitzeko Irina, Masa Zaharreko Ogia",
|
|
|
|
|
|
"productType": "Produktu Mota",
|
|
|
|
|
|
"unitOfMeasure": "Neurri Unitatea",
|
|
|
|
|
|
"sku": "SKU",
|
|
|
|
|
|
"skuPlaceholder": "Utzi hutsik automatikoki sortzeko",
|
|
|
|
|
|
"skuTooltip": "Utzi hutsik backend-etik automatikoki sortzeko, edo sartu SKU pertsonalizatua",
|
|
|
|
|
|
"barcode": "Barra Kodea",
|
|
|
|
|
|
"barcodePlaceholder": "Barra Kodea/UPC/EAN",
|
|
|
|
|
|
"ingredientCategory": "Osagai Kategoria",
|
|
|
|
|
|
"productCategory": "Produktu Kategoria",
|
|
|
|
|
|
"brand": "Marka",
|
|
|
|
|
|
"brandPlaceholder": "Marka izena",
|
|
|
|
|
|
"description": "Deskribapena",
|
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": "Inbentario elementuaren deskribapen zehatza",
|
|
|
|
|
|
"averageCost": "Batez Besteko Kostua (€)",
|
|
|
|
|
|
"lastPurchasePrice": "Azken Erosketa Prezioa (€)",
|
|
|
|
|
|
"standardCost": "Kostu Estandarra (€)",
|
|
|
|
|
|
"sellingPrice": "Salmenta Prezioa (€)",
|
|
|
|
|
|
"minimumPrice": "Gutxieneko Prezioa (€)",
|
|
|
|
|
|
"lowStockThreshold": "Stock Baxuko Atalasea",
|
|
|
|
|
|
"reorderPoint": "Berriro Eskatzeko Puntua",
|
|
|
|
|
|
"reorderQuantity": "Berriro Eskatzeko Kantitatea",
|
|
|
|
|
|
"maxStockLevel": "Gehienezko Stock Maila",
|
|
|
|
|
|
"leadTimeDays": "Entrega Denbora (egunak)",
|
|
|
|
|
|
"packageSize": "Pakete Tamaina",
|
|
|
|
|
|
"packageSizePlaceholder": "Adib: 25kg zorroa, 12ko paketea",
|
|
|
|
|
|
"shelfLifeDays": "Bizi Iraupena (egunak)",
|
|
|
|
|
|
"displayLifeHours": "Erakusketaren Iraupena (orduak)",
|
|
|
|
|
|
"storageTempRange": "Biltegiratze Tenperatura Eremua (°C)",
|
|
|
|
|
|
"storageTempMin": "Gutx",
|
|
|
|
|
|
"storageTempMax": "Geh",
|
|
|
|
|
|
"storageInstructions": "Biltegiratze Jarraibideak",
|
|
|
|
|
|
"storageInstructionsPlaceholder": "Adib: Gorde leku fresko eta lehorrean eguzki-argitik urrun",
|
|
|
|
|
|
"handlingInstructions": "Maneiatzeko Jarraibideak",
|
|
|
|
|
|
"handlingInstructionsPlaceholder": "Maneiatzeko eskakizun bereziak",
|
|
|
|
|
|
"isPerishable": "Elementu Hondagarria",
|
|
|
|
|
|
"preferredSupplierId": "Hornitzaile Hobetsiko ID",
|
|
|
|
|
|
"preferredSupplierIdPlaceholder": "Hornitzailearen ID",
|
|
|
|
|
|
"supplierProductCode": "Hornitzailearen Produktu Kodea",
|
|
|
|
|
|
"supplierProductCodePlaceholder": "Hornitzailearen produktu kodea",
|
|
|
|
|
|
"allergenInfo": "Alergenoen Informazioa",
|
|
|
|
|
|
"allergenInfoPlaceholder": "glutena, esnea, arrautzak",
|
|
|
|
|
|
"nutritionalInfo": "Nutrizio Informazioa",
|
|
|
|
|
|
"nutritionalInfoPlaceholder": "kaloriak:250, proteina:8g, karbohidratoak:45g",
|
|
|
|
|
|
"certifications": "Ziurtagiriak",
|
|
|
|
|
|
"certificationsPlaceholder": "Organikoa, GMO gabea, Kosher",
|
|
|
|
|
|
"weight": "Pisua (kg)",
|
|
|
|
|
|
"volume": "Bolumena (L)",
|
|
|
|
|
|
"dimensions": "Dimentsioak (L×Z×A cm)",
|
|
|
|
|
|
"dimensionsPlaceholder": "30×20×15",
|
|
|
|
|
|
"color": "Kolorea",
|
|
|
|
|
|
"colorPlaceholder": "Produktuaren kolorea",
|
|
|
|
|
|
"isActive": "Elementu Aktiboa",
|
|
|
|
|
|
"trackByLot": "Lote/Batch-ren arabera jarraitu",
|
|
|
|
|
|
"trackByExpiry": "Iraungitze Dataren arabera jarraitu",
|
|
|
|
|
|
"allowNegativeStock": "Stock Negatiboa Baimendu",
|
|
|
|
|
|
"notes": "Oharrak",
|
|
|
|
|
|
"notesPlaceholder": "Elementu honi buruzko ohar gehigarriak",
|
|
|
|
|
|
"tags": "Etiketak",
|
|
|
|
|
|
"tagsPlaceholder": "organikoa, premium, denborakoa",
|
|
|
|
|
|
"customFields": "Eremu Pertsonalizatuak (JSON)",
|
|
|
|
|
|
"customFieldsPlaceholder": "{\"eremu_pertsonalizatua\": \"balioa\"}"
|
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": "Oinarrizko Informazioa",
|
|
|
|
|
|
"advancedOptions": "Aukera Aurreratuak",
|
|
|
|
|
|
"advancedOptionsDescription": "Inbentario kudeaketa osoa egiteko eremu aukerazkoak",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"additionalInformationDescription": "Produktu identifikatzaile aukerazkoak",
|
|
|
|
|
|
"additionalDetails": "Xehetasun Gehigarriak",
|
|
|
|
|
|
"additionalDetailsDescription": "Produktuaren xehetasun aukerazkoak",
|
|
|
|
|
|
"advancedStockSettings": "Stock Ezarpen Aurreratuak",
|
|
|
|
|
|
"advancedStockSettingsDescription": "Konfiguratu inbentario atalaseak eta berriro eskatzeko puntuak",
|
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": "Prezioen Informazioa",
|
|
|
|
|
|
"inventoryManagement": "Inbentario Kudeaketa",
|
|
|
|
|
|
"productInformation": "Produktuaren Informazioa",
|
|
|
|
|
|
"storageAndHandling": "Biltegiratze eta Maneiua",
|
|
|
|
|
|
"supplierInformation": "Hornitzailearen Informazioa",
|
|
|
|
|
|
"qualityAndCompliance": "Kalitatea eta Betetze",
|
|
|
|
|
|
"physicalProperties": "Propietate Fisikoak",
|
|
|
|
|
|
"statusAndTracking": "Egoera eta Jarraipena",
|
|
|
|
|
|
"additionalInformation": "Informazio Gehigarria"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productTypes": {
|
|
|
|
|
|
"ingredient": "Osagaia",
|
|
|
|
|
|
"finished_product": "Produktu Amaitua",
|
|
|
|
|
|
"packaging": "Ontziratzea",
|
|
|
|
|
|
"consumable": "Kontsumitzeko"
|
|
|
|
|
|
},
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"select": "Hautatu...",
|
|
|
|
|
|
"kg": "Kilogramoak (kg)",
|
|
|
|
|
|
"g": "Gramoak (g)",
|
|
|
|
|
|
"l": "Litroak (L)",
|
|
|
|
|
|
"ml": "Mililitroak (ml)",
|
|
|
|
|
|
"units": "Unitateak",
|
|
|
|
|
|
"dozen": "Dozena",
|
|
|
|
|
|
"lb": "Libratok (lb)",
|
|
|
|
|
|
"oz": "Ontzak (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": "Hautatu...",
|
|
|
|
|
|
"flour": "Irinak",
|
|
|
|
|
|
"dairy": "Esnekiak",
|
|
|
|
|
|
"eggs": "Arrautzak",
|
|
|
|
|
|
"fats": "Gantzak eta Olioak",
|
|
|
|
|
|
"sweeteners": "Gozo-gailuak",
|
|
|
|
|
|
"additives": "Gehigarriak",
|
|
|
|
|
|
"fruits": "Frutak",
|
|
|
|
|
|
"nuts": "Fruitu Lehorrak eta Haziak",
|
|
|
|
|
|
"spices": "Espezia",
|
|
|
|
|
|
"leavening": "Altxatzeko Agenteak"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productCategories": {
|
|
|
|
|
|
"select": "Hautatu...",
|
|
|
|
|
|
"bread": "Ogia",
|
|
|
|
|
|
"pastry": "Gozogintzak",
|
|
|
|
|
|
"cake": "Tartak",
|
|
|
|
|
|
"cookies": "Galetak",
|
|
|
|
|
|
"specialty": "Elementu Bereziak"
|
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": "Kalitate Txantiloia Gehitu",
|
|
|
|
|
|
"templateDetails": "Kalitate Txantiloiaren Xehetasunak",
|
|
|
|
|
|
"fillRequiredInfo": "Bete beharrezko informazioa kalitate kontrol txantiloi bat sortzeko",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Izena",
|
|
|
|
|
|
"namePlaceholder": "Adib: Ogiaren Kalitate Kontrola, Higiene Ikuskatzea",
|
|
|
|
|
|
"checkType": "Egiaztapen Mota",
|
|
|
|
|
|
"weight": "Pisua",
|
|
|
|
|
|
"weightTooltip": "Puntuaziorako garrantzi pisua (0.0-10.0)",
|
|
|
|
|
|
"templateCode": "Txantiloi Kodea",
|
|
|
|
|
|
"templateCodePlaceholder": "Utzi hutsik automatikoki sortzeko",
|
|
|
|
|
|
"templateCodeTooltip": "Utzi hutsik backend-etik automatikoki sortzeko, edo sartu kode pertsonalizatua",
|
|
|
|
|
|
"version": "Bertsioa",
|
|
|
|
|
|
"description": "Deskribapena",
|
|
|
|
|
|
"descriptionPlaceholder": "Kalitate kontrol txantiloiaren deskribapen zehatza",
|
|
|
|
|
|
"applicableStages": "Aplikagarriak Diren Faseak",
|
|
|
|
|
|
"applicableStagesTooltip": "Komaz bereizitako ekoizpen faseen zerrenda: adib: nahasketaNahasketa, hartzidura, labean, hoztetanHozte",
|
|
|
|
|
|
"applicablePlaceholder": "nahasketa, hartzidura, labea, hozte"
|
|
|
|
|
|
},
|
|
|
|
|
|
"checkTypes": {
|
|
|
|
|
|
"product_quality": "Produktuaren Kalitatea",
|
|
|
|
|
|
"process_hygiene": "Prozesuaren Higienea",
|
|
|
|
|
|
"equipment": "Ekipamendua",
|
|
|
|
|
|
"safety": "Segurtasuna",
|
|
|
|
|
|
"cleaning": "Garbiketa",
|
|
|
|
|
|
"temperature": "Tenperatura Kontrola",
|
|
|
|
|
|
"documentation": "Dokumentazioa"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
|
|
|
|
|
"basicInformation": "Oinarrizko Informazioa",
|
|
|
|
|
|
"scoringConfiguration": "Puntuazio Konfigurazioa",
|
|
|
|
|
|
"advancedOptions": "Aukera Aurreratuak",
|
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": "Kalitate txantiloi konfigurazio osoa egiteko eremu aukerazkoak",
|
|
|
|
|
|
"checkPointsConfiguration": "Kontrol Puntuen Konfigurazioa",
|
|
|
|
|
|
"advancedConfiguration": "Konfigurazio Aurreratua (JSONB)",
|
|
|
|
|
|
"responsibilityRequirements": "Erantzukizuna eta Eskakizunak",
|
|
|
|
|
|
"controlSettings": "Kontrol Ezarpenak"
|
|
|
|
|
|
},
|
|
|
|
|
|
"scoringMethods": {
|
|
|
|
|
|
"scoringMethod": "Puntuazio Metodoa",
|
|
|
|
|
|
"weightedAverage": "Batez Besteko Haztatua",
|
|
|
|
|
|
"passFail": "Gainditu/Huts egin",
|
|
|
|
|
|
"percentage": "Ehunekoa",
|
|
|
|
|
|
"pointsBased": "Puntuetan Oinarrituta"
|
|
|
|
|
|
},
|
|
|
|
|
|
"advancedFields": {
|
|
|
|
|
|
"checkPointsJsonArray": "Kontrol Puntuak (JSON Array)",
|
|
|
|
|
|
"checkPointsTooltip": "Kontrol puntuen array-a: [{\"name\": \"Ikusizko Kontrola\", \"description\": \"...\", \"weight\": 1.0}]",
|
|
|
|
|
|
"checkPointsPlaceholder": "[{\"name\": \"Ikusizko Ikuskatzea\", \"description\": \"Itxura egiaztatu\", \"expected_value\": \"Urre marroia\", \"measurement_type\": \"visual\", \"is_critical\": false, \"weight\": 1.0}]",
|
|
|
|
|
|
"acceptanceCriteria": "Onarpenerako Irizpideak",
|
|
|
|
|
|
"acceptanceCriteriaPlaceholder": "Adib: Kolore urre uniformea, ehundura puzgatua, erreadurak gabe...",
|
|
|
|
|
|
"parametersJson": "Parametroak (JSON)",
|
|
|
|
|
|
"parametersTooltip": "Txantiloiaren parametroak: {\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"parametersPlaceholder": "{\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"thresholdsJson": "Atalaseak (JSON)",
|
|
|
|
|
|
"thresholdsTooltip": "Atalase balioak: {\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"thresholdsPlaceholder": "{\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"scoringCriteriaJson": "Puntuazio Irizpideak (JSON)",
|
|
|
|
|
|
"scoringCriteriaTooltip": "Puntuazio irizpide pertsonalizatuak: {\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"scoringCriteriaPlaceholder": "{\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"responsibleRole": "Arduradunaren Rola/Pertsona",
|
|
|
|
|
|
"responsibleRolePlaceholder": "Adib: Ekoizpen Kudeatzailea, Okindegilea",
|
|
|
|
|
|
"requiredEquipment": "Beharrezko Ekipamendua/Tresnak",
|
|
|
|
|
|
"requiredEquipmentPlaceholder": "Adib: Termometroa, balantza, kronometroa",
|
|
|
|
|
|
"specificConditions": "Baldintza Espezifikoak edo Oharrak",
|
|
|
|
|
|
"specificConditionsPlaceholder": "Adib: Egun hezetan soilik aplikagarria, labean 30 minutu geroago egiaztatu...",
|
|
|
|
|
|
"passThresholdPercent": "Gainditzeko Atalasea (%)",
|
|
|
|
|
|
"frequencyDays": "Maiztasuna (egunak)",
|
|
|
|
|
|
"frequencyPlaceholder": "Utzi hutsik lote oinarritua izateko",
|
|
|
|
|
|
"requiredCheck": "Beharrezko Egiaztapena",
|
|
|
|
|
|
"activeTemplate": "Txantiloi Aktiboa",
|
|
|
|
|
|
"requiresPhotoEvidence": "Argazki Frogak Behar Ditu",
|
|
|
|
|
|
"criticalControlPoint": "Kontrol Puntu Kritikoa (KPK)",
|
|
|
|
|
|
"notifyOnFailure": "Jakinarazi Hutsegitean",
|
|
|
|
|
|
"templateDetailsTitle": "Txantiloiaren Xehetasunak"
|
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": "Eskaera Gehitu",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"customerSelection": "Bezeroaren Hautaketa",
|
|
|
|
|
|
"orderItems": "Eskaeraren Elementuak",
|
|
|
|
|
|
"deliveryAndPayment": "Bidalketa eta Ordainketa"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerSelection": {
|
|
|
|
|
|
"title": "Bezeroa Hautatu edo Sortu",
|
|
|
|
|
|
"subtitle": "Aukeratu lehendik dagoen bezero bat edo sortu berri bat",
|
|
|
|
|
|
"searchPlaceholder": "Bilatu bezeroak...",
|
|
|
|
|
|
"createNew": "Sortu bezero berria",
|
|
|
|
|
|
"backToList": "← Itzuli bezeroen zerrendara",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"customerName": "Bezeroaren Izena",
|
|
|
|
|
|
"customerNamePlaceholder": "Adib: Errota Jatetxea",
|
|
|
|
|
|
"customerType": "Bezero Mota",
|
|
|
|
|
|
"phone": "Telefonoa",
|
|
|
|
|
|
"phonePlaceholder": "+34 123 456 789",
|
|
|
|
|
|
"email": "Posta Elektronikoa",
|
|
|
|
|
|
"emailPlaceholder": "kontaktua@jatetxea.com"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerTypes": {
|
|
|
|
|
|
"retail": "Txikizkako Salmentaketa",
|
|
|
|
|
|
"wholesale": "Handizkakoa",
|
|
|
|
|
|
"event": "Ekitaldia",
|
|
|
|
|
|
"restaurant": "Jatetxea"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"title": "Gehitu Produktuak Eskaerara",
|
|
|
|
|
|
"subtitle": "Hautatu produktuak eta kantitateak",
|
|
|
|
|
|
"addItem": "Gehitu Elementua",
|
|
|
|
|
|
"removeItem": "Kendu elementua",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"product": "Produktua",
|
|
|
|
|
|
"productPlaceholder": "Hautatu produktua...",
|
|
|
|
|
|
"quantity": "Kantitatea",
|
|
|
|
|
|
"unitPrice": "Unitate Prezioa (€)",
|
|
|
|
|
|
"customRequirements": "Eskakizun Pertsonalizatuak",
|
|
|
|
|
|
"customRequirementsPlaceholder": "Jarraibide bereziak...",
|
|
|
|
|
|
"subtotal": "Azpitotala"
|
|
|
|
|
|
},
|
|
|
|
|
|
"total": "Guztira Kopurua"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryPayment": {
|
|
|
|
|
|
"title": "Bidalketa eta Ordainketaren Xehetasunak",
|
|
|
|
|
|
"subtitle": "Konfiguratu bidalketa, ordainketa eta eskaeraren xehetasunak",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"requestedDeliveryDate": "Eskatutako Bidalketa Data",
|
|
|
|
|
|
"orderNumber": "Eskaera Zenbakia",
|
|
|
|
|
|
"orderNumberTooltip": "Backend-eak automatikoki sortua eskaera sortzean (formatua: ORD-UUUUHHEE-####)",
|
|
|
|
|
|
"status": "Egoera",
|
|
|
|
|
|
"orderType": "Eskaera Mota",
|
|
|
|
|
|
"priority": "Lehentasuna"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
|
|
|
|
|
"basicInfo": "Eskaeraren Oinarrizko Informazioa",
|
2025-11-10 13:37:20 +00:00
|
|
|
|
"deliveryInfo": "Bidalketa Xehetasunak",
|
|
|
|
|
|
"paymentInfo": "Ordainketa Xehetasunak",
|
|
|
|
|
|
"orderSummary": "Eskaeraren Laburpena",
|
|
|
|
|
|
"advancedOptions": "Aukera Aurreratuak",
|
|
|
|
|
|
"advancedOptionsDescription": "Eskaera kudeaketa osoa egiteko eremu aukerazkoak",
|
|
|
|
|
|
"pricingDetails": "Prezioen Xehetasunak",
|
|
|
|
|
|
"productionScheduling": "Ekoizpena eta Programazioa",
|
|
|
|
|
|
"fulfillmentTracking": "Betetze eta Jarraipena",
|
|
|
|
|
|
"sourceChannel": "Jatorria eta Kanala",
|
|
|
|
|
|
"communicationNotes": "Komunikazioa eta Oharrak",
|
|
|
|
|
|
"notifications": "Jakinarazpenak",
|
|
|
|
|
|
"qualityRequirements": "Kalitatea eta Eskakizunak",
|
|
|
|
|
|
"additionalOptions": "Aukera Gehigarriak"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderTypes": {
|
|
|
|
|
|
"standard": "Estandarra",
|
|
|
|
|
|
"custom": "Pertsonalizatua",
|
|
|
|
|
|
"bulk": "Granel",
|
|
|
|
|
|
"urgent": "Urgentea"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Baxua",
|
|
|
|
|
|
"normal": "Normala",
|
|
|
|
|
|
"high": "Altua",
|
|
|
|
|
|
"urgent": "Urgentea"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"pending": "Zain",
|
|
|
|
|
|
"confirmed": "Baieztaturik",
|
|
|
|
|
|
"in_production": "Ekoizpenean",
|
|
|
|
|
|
"ready": "Prest",
|
|
|
|
|
|
"delivered": "Entregatua"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryMethods": {
|
|
|
|
|
|
"pickup": "Biltzea",
|
|
|
|
|
|
"pickupDesc": "Bezeroaren biltzea",
|
|
|
|
|
|
"delivery": "Entrega",
|
|
|
|
|
|
"deliveryDesc": "Etxera entrega",
|
|
|
|
|
|
"shipping": "Bidalketa",
|
|
|
|
|
|
"shippingDesc": "Mezularitza zerbitzua"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentMethods": {
|
|
|
|
|
|
"cash": "Dirua",
|
|
|
|
|
|
"card": "Txartela",
|
|
|
|
|
|
"bank_transfer": "Banku Transferentzia",
|
|
|
|
|
|
"invoice": "Faktura",
|
|
|
|
|
|
"account": "Kontua"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentTerms": {
|
|
|
|
|
|
"immediate": "Berehalakoa",
|
|
|
|
|
|
"net_30": "Garbia 30",
|
|
|
|
|
|
"net_60": "Garbia 60"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentStatuses": {
|
|
|
|
|
|
"pending": "Zain",
|
|
|
|
|
|
"partial": "Partziala",
|
|
|
|
|
|
"paid": "Ordaindua",
|
|
|
|
|
|
"overdue": "Atzeratua"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderSources": {
|
|
|
|
|
|
"manual": "Eskuzkoa",
|
|
|
|
|
|
"phone": "Telefonoa",
|
|
|
|
|
|
"email": "Posta Elektronikoa",
|
|
|
|
|
|
"website": "Webgunea",
|
|
|
|
|
|
"app": "Mugikorrerako Aplikazioa"
|
|
|
|
|
|
},
|
|
|
|
|
|
"salesChannels": {
|
|
|
|
|
|
"direct": "Zuzena",
|
|
|
|
|
|
"wholesale": "Handizkakoa",
|
|
|
|
|
|
"retail": "Txikizkakoa",
|
|
|
|
|
|
"online": "Lineako"
|
|
|
|
|
|
},
|
|
|
|
|
|
"qualityCheckStatuses": {
|
|
|
|
|
|
"not_started": "Hasi Gabe",
|
|
|
|
|
|
"pending": "Zain",
|
|
|
|
|
|
"passed": "Gainditu",
|
|
|
|
|
|
"failed": "Huts Egin"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"loadingCustomers": "Bezeroak kargatzen...",
|
|
|
|
|
|
"loadingProducts": "Produktuak kargatzen...",
|
|
|
|
|
|
"errorLoadingCustomers": "Errorea bezeroak kargatzean",
|
|
|
|
|
|
"errorLoadingProducts": "Errorea produktuak kargatzean",
|
|
|
|
|
|
"noCustomersFound": "Ez da bezerorik aurkitu",
|
|
|
|
|
|
"tryDifferentSearch": "Saiatu bilaketa-termino desberdin batekin",
|
|
|
|
|
|
"noProductsInOrder": "Ez dago produkturik eskaera honetan",
|
|
|
|
|
|
"clickAddProduct": "Sakatu \"Gehitu Produktua\" hasteko",
|
|
|
|
|
|
"newCustomer": "Bezero Berria",
|
|
|
|
|
|
"customer": "Bezeroa",
|
|
|
|
|
|
"products": "Produktuak",
|
|
|
|
|
|
"items": "elementuak",
|
|
|
|
|
|
"total": "Guztira",
|
|
|
|
|
|
"productNumber": "Produktua #",
|
|
|
|
|
|
"searchByName": "Bilatu bezeroa izenaren arabera...",
|
|
|
|
|
|
"selectCustomer": "Hautatu Bezeroa",
|
|
|
|
|
|
"searchForCustomer": "Bilatu lehendik dagoen bezero bat edo sortu berri bat",
|
|
|
|
|
|
"orderItems": "Eskaeraren Elementuak",
|
|
|
|
|
|
"addProducts": "Gehitu Produktuak Eskaerara",
|
|
|
|
|
|
"customerLabel": "Bezeroa:",
|
|
|
|
|
|
"productsLabel": "Produktuak:",
|
|
|
|
|
|
"totalLabel": "Guztira:",
|
|
|
|
|
|
"orderTotal": "Eskaeraren Guztira:",
|
|
|
|
|
|
"newCustomerHeader": "Bezero Berria",
|
|
|
|
|
|
"orderProducts": "Eskaeraren Produktuak",
|
|
|
|
|
|
"addProduct": "Gehitu Produktua",
|
|
|
|
|
|
"removeItem": "Kendu elementua",
|
|
|
|
|
|
"optionalEmail": "Posta Elektronikoa (Aukerakoa)",
|
|
|
|
|
|
"readOnlyAutoGenerated": "Eskaera Zenbakia (Irakurtzeko soilik - Automatikoki sortua)",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Automatikoki sortuko da",
|
|
|
|
|
|
"autoGeneratedOnSave": "Automatikoki sortua gordetzean",
|
|
|
|
|
|
"orderNumberFormat": "formatua: ORD-UUUUHHEE-####",
|
|
|
|
|
|
"selectProduct": "Hautatu produktua...",
|
|
|
|
|
|
"deliveryAddress": "Bidalketa Helbidea",
|
|
|
|
|
|
"deliveryAddressPlaceholder": "Kalea, zenbakia, pisua, posta kodea, hiria...",
|
|
|
|
|
|
"deliveryContactName": "Bidalketarako Kontaktu Izena",
|
|
|
|
|
|
"deliveryContactNamePlaceholder": "Kontaktu pertsona",
|
|
|
|
|
|
"deliveryContactPhone": "Bidalketarako Kontaktu Telefonoa",
|
|
|
|
|
|
"deliveryMethod": "Bidalketa Metodoa",
|
|
|
|
|
|
"paymentMethod": "Ordainketa Metodoa",
|
|
|
|
|
|
"paymentTerms": "Ordainketa Baldintzak",
|
|
|
|
|
|
"paymentStatus": "Ordainketa Egoera",
|
|
|
|
|
|
"paymentDueDate": "Ordainketa Muga Data",
|
|
|
|
|
|
"discountPercent": "Deskontua (%)",
|
|
|
|
|
|
"deliveryFee": "Bidalketa Tarifa (€)",
|
|
|
|
|
|
"productionStartDate": "Ekoizpen Hasiera Data",
|
|
|
|
|
|
"productionDueDate": "Ekoizpen Muga Data",
|
|
|
|
|
|
"productionBatchNumber": "Ekoizpen Lote Zenbakia",
|
|
|
|
|
|
"productionBatchNumberPlaceholder": "LOTE-001",
|
|
|
|
|
|
"deliveryTimeWindow": "Bidalketa Denbora Tartea",
|
|
|
|
|
|
"deliveryTimeWindowPlaceholder": "Adib: 9:00 AM - 11:00 AM",
|
|
|
|
|
|
"productionNotes": "Ekoizpen Oharrak",
|
|
|
|
|
|
"productionNotesPlaceholder": "Ekoizpenerako eskakizun bereziak edo oharrak",
|
|
|
|
|
|
"shippingTrackingNumber": "Bidalketa Jarraipena Zenbakia",
|
|
|
|
|
|
"shippingTrackingNumberPlaceholder": "Jarraipena zenbakia",
|
|
|
|
|
|
"shippingCarrier": "Bidalketa Enpresa",
|
|
|
|
|
|
"shippingCarrierPlaceholder": "Adib: DHL, UPS, FedEx",
|
|
|
|
|
|
"pickupLocation": "Biltzeko Kokapena",
|
|
|
|
|
|
"pickupLocationPlaceholder": "Denda kokapena biltzeko",
|
|
|
|
|
|
"actualDeliveryDate": "Benetako Bidalketa Data",
|
|
|
|
|
|
"orderSource": "Eskaeraren Jatorria",
|
|
|
|
|
|
"salesChannel": "Salmenta Kanala",
|
|
|
|
|
|
"salesRepId": "Salmenta Ordezkariararen IDa",
|
|
|
|
|
|
"salesRepIdPlaceholder": "Salmenta ordezkariararen IDa edo izena",
|
|
|
|
|
|
"customerPurchaseOrder": "Bezeroaren Erosketa Eskaera #",
|
|
|
|
|
|
"customerPurchaseOrderPlaceholder": "Bezeroaren EE zenbakia",
|
|
|
|
|
|
"deliveryInstructions": "Bidalketa Jarraibideak",
|
|
|
|
|
|
"deliveryInstructionsPlaceholder": "Bidalketa jarraibide bereziak",
|
|
|
|
|
|
"specialInstructions": "Jarraibide Bereziak",
|
|
|
|
|
|
"specialInstructionsPlaceholder": "Edozein eskakizun edo jarraibide berezi",
|
|
|
|
|
|
"internalNotes": "Barneko Oharrak",
|
|
|
|
|
|
"internalNotesPlaceholder": "Barneko oharrak (bezeroari ikusten ez zaio)",
|
|
|
|
|
|
"customerNotes": "Bezeroaren Oharrak",
|
|
|
|
|
|
"customerNotesPlaceholder": "-tik/-rako oharrak bezeroa",
|
|
|
|
|
|
"notifyOnStatusChange": "Jakinarazi Egoera Aldatzean",
|
|
|
|
|
|
"notifyOnDelivery": "Jakinarazi Entregatzean",
|
|
|
|
|
|
"notificationEmail": "Jakinarazpen Posta Elektronikoa",
|
|
|
|
|
|
"notificationEmailPlaceholder": "bezeroa@posta.com",
|
|
|
|
|
|
"notificationPhone": "Jakinarazpen Telefonoa",
|
|
|
|
|
|
"qualityCheckRequired": "Kalitate Kontrola Beharrezkoa",
|
|
|
|
|
|
"qualityCheckStatus": "Kalitate Kontrolaren Egoera",
|
|
|
|
|
|
"packagingInstructions": "Ontziratzeko Jarraibideak",
|
|
|
|
|
|
"packagingInstructionsPlaceholder": "Ontziratzeko eskakizun bereziak",
|
|
|
|
|
|
"labelingRequirements": "Etiketatzeko Eskakizunak",
|
|
|
|
|
|
"labelingRequirementsPlaceholder": "Etiketa eskakizun pertsonalizatuak",
|
|
|
|
|
|
"recurringOrder": "Eskaera Errepikakorria",
|
|
|
|
|
|
"recurringSchedule": "Errepikapen Egutegia",
|
|
|
|
|
|
"recurringSchedulePlaceholder": "Adib: Astero astelehenetan, 2 astero",
|
|
|
|
|
|
"tags": "Etiketak",
|
|
|
|
|
|
"tagsPlaceholder": "urgentea, vip, handizkakoa",
|
|
|
|
|
|
"tagsTooltip": "Komaz bereizitako etiketak bilaketa eta iragazketa errazteko",
|
|
|
|
|
|
"metadata": "Metadatuak (JSON)",
|
|
|
|
|
|
"metadataPlaceholder": "{\"eremu_pertsonalizatua\": \"balioa\"}",
|
|
|
|
|
|
"metadataTooltip": "Datu pertsonalizatu gehigarriak JSON formatuan"
|
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": "Hautatu Mota",
|
|
|
|
|
|
"description": "Aukeratu zer gehitu nahi duzun",
|
|
|
|
|
|
"types": {
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inbentarioa",
|
|
|
|
|
|
"description": "Gehitu osagaiak edo produktuak zure inbentariora"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Hornitzailea",
|
|
|
|
|
|
"description": "Gehitu hornitzaile edo saltzaile berri bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Errezeta",
|
|
|
|
|
|
"description": "Sortu errezeta edo formula berri bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Ekipamendua",
|
|
|
|
|
|
"description": "Erregistratu okindegiaren ekipamendua edo makina"
|
|
|
|
|
|
},
|
|
|
|
|
|
"quality-template": {
|
|
|
|
|
|
"title": "Kalitate Txantiloia",
|
|
|
|
|
|
"description": "Sortu kalitate kontrol txantiloi bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer-order": {
|
|
|
|
|
|
"title": "Bezeroaren Eskaera",
|
|
|
|
|
|
"description": "Sortu bezero eskaera berri bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Bezeroa",
|
|
|
|
|
|
"description": "Gehitu bezero berri bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"team-member": {
|
|
|
|
|
|
"title": "Taldeko Kidea",
|
|
|
|
|
|
"description": "Gehitu taldeko kide edo langile bat"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sales-entry": {
|
|
|
|
|
|
"title": "Salmenta Erregistroa",
|
|
|
|
|
|
"description": "Erregistratu salmenta transakzio bat"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"tooltips": {
|
|
|
|
|
|
"averageCost": "Batez besteko kostua unitateko erosketa historikoan oinarrituta",
|
|
|
|
|
|
"standardCost": "Kostu estandarra/espero unitateko kostu kalkuluetarako",
|
|
|
|
|
|
"lowStockThreshold": "Alerta stock maila honen azpitik erortzen denean",
|
|
|
|
|
|
"reorderPoint": "Aktibatu berriro eskaera stock maila honetara heltzen denean",
|
|
|
|
|
|
"reorderQuantity": "Estandar kantitatea berriro eskatzean",
|
|
|
|
|
|
"leadTime": "Eskaera egin eta entregaren arteko denbora",
|
|
|
|
|
|
"displayLife": "Produktua erakusgarri egon daitekeen orduak kalitatea degradatu aurretik",
|
|
|
|
|
|
"allergenInfo": "Komaz bereizitako zerrenda: adib: glutena, esnea, arrautzak, fruitu lehorrak",
|
|
|
|
|
|
"nutritionalInfo": "Nutrizio datu nagusiak komaz bereizitako zerrenda gisa",
|
|
|
|
|
|
"certifications": "Komaz bereizitako zerrenda: adib: Organikoa, GMO gabea, Kosher",
|
|
|
|
|
|
"tags": "Komaz bereizitako etiketak bilaketa eta iragazketa errazteko",
|
|
|
|
|
|
"customFields": "Datu pertsonalizatu gehigarriak JSON formatuan",
|
|
|
|
|
|
"passThreshold": "Onesteko behar den gutxieneko puntuazioa (0-100)",
|
|
|
|
|
|
"frequencyDays": "Zenbat maiztasunekin egin behar den egiaztapen hau (utzi hutsik lote oinarritua izateko)",
|
|
|
|
|
|
"checkPoints": "Egiaztapen puntuen matrizea",
|
|
|
|
|
|
"parameters": "Txantiloi parametroak",
|
|
|
|
|
|
"thresholds": "Atalase balioak",
|
|
|
|
|
|
"scoringCriteria": "Puntuazio irizpide pertsonalizatuak"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|