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": "Optional",
|
|
|
|
|
|
"required": "Required",
|
|
|
|
|
|
"autoGenerated": "Auto-generated",
|
|
|
|
|
|
"leaveEmptyForAutoGeneration": "Leave empty for auto-generation",
|
|
|
|
|
|
"readOnly": "Read-only - Auto-generated",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Will be generated automatically",
|
2025-12-25 20:51:03 +01:00
|
|
|
|
"autoGeneratedOnSave": "Auto-generated on save",
|
|
|
|
|
|
"show": "Show",
|
|
|
|
|
|
"hide": "Hide",
|
|
|
|
|
|
"next": "Next",
|
|
|
|
|
|
"back": "Back",
|
|
|
|
|
|
"complete": "Complete",
|
|
|
|
|
|
"stepOf": "Step {current} of {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": "Show Builder",
|
|
|
|
|
|
"showJson": "Show JSON",
|
|
|
|
|
|
"suggestions": "Quick suggestions",
|
|
|
|
|
|
"keyPlaceholder": "Key",
|
|
|
|
|
|
"valuePlaceholder": "Value",
|
|
|
|
|
|
"remove": "Remove",
|
|
|
|
|
|
"addPair": "Add Parameter",
|
|
|
|
|
|
"emptyState": "No parameters yet. Click 'Add Parameter' to get started."
|
|
|
|
|
|
},
|
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": "Add Inventory",
|
|
|
|
|
|
"inventoryDetails": "Inventory Item Details",
|
|
|
|
|
|
"fillRequiredInfo": "Fill in the required information to create an inventory item",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"summary": "Summary",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"productType": "Product Type",
|
|
|
|
|
|
"basicInfo": "Basic Information",
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"stockConfig": "Stock Configuration",
|
|
|
|
|
|
"initialStock": "Initial Stock"
|
|
|
|
|
|
},
|
|
|
|
|
|
"initialStockDescription": "Add one or more lots to register the initial inventory",
|
|
|
|
|
|
"stockConfig": {
|
|
|
|
|
|
"product": "Product",
|
|
|
|
|
|
"totalQuantity": "Total Quantity",
|
|
|
|
|
|
"totalValue": "Total Value",
|
|
|
|
|
|
"lotsRegistered": "Lots Registered",
|
|
|
|
|
|
"lot": "Lot",
|
|
|
|
|
|
"remove": "Remove",
|
|
|
|
|
|
"quantity": "Quantity",
|
|
|
|
|
|
"unitCost": "Unit Cost ($)",
|
|
|
|
|
|
"lotNumber": "Lot Number",
|
|
|
|
|
|
"expirationDate": "Expiration Date",
|
|
|
|
|
|
"location": "Location",
|
|
|
|
|
|
"lotValue": "Lot value:",
|
|
|
|
|
|
"addInitialLot": "Add Initial Lot",
|
|
|
|
|
|
"addAnotherLot": "Add Another Lot",
|
|
|
|
|
|
"skipMessage": "You can skip this step if you prefer to add the initial stock later"
|
2025-11-15 21:21:06 +01:00
|
|
|
|
},
|
|
|
|
|
|
"typeDescriptions": {
|
|
|
|
|
|
"ingredient": "Raw materials and ingredients used in recipes",
|
|
|
|
|
|
"finished_product": "Final products ready for sale or consumption"
|
|
|
|
|
|
},
|
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": "Name",
|
|
|
|
|
|
"namePlaceholder": "E.g., All-Purpose Flour, Sourdough Bread",
|
|
|
|
|
|
"productType": "Product Type",
|
|
|
|
|
|
"unitOfMeasure": "Unit of Measure",
|
|
|
|
|
|
"sku": "SKU",
|
|
|
|
|
|
"skuPlaceholder": "Leave empty for auto-generation",
|
|
|
|
|
|
"skuTooltip": "Leave empty to auto-generate from backend, or enter custom SKU",
|
|
|
|
|
|
"barcode": "Barcode",
|
|
|
|
|
|
"barcodePlaceholder": "Barcode/UPC/EAN",
|
|
|
|
|
|
"ingredientCategory": "Ingredient Category",
|
|
|
|
|
|
"productCategory": "Product Category",
|
|
|
|
|
|
"brand": "Brand",
|
|
|
|
|
|
"brandPlaceholder": "Brand name",
|
|
|
|
|
|
"description": "Description",
|
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": "Detailed description of the inventory item",
|
|
|
|
|
|
"averageCost": "Average Cost (€)",
|
|
|
|
|
|
"lastPurchasePrice": "Last Purchase Price (€)",
|
|
|
|
|
|
"standardCost": "Standard Cost (€)",
|
|
|
|
|
|
"sellingPrice": "Selling Price (€)",
|
|
|
|
|
|
"minimumPrice": "Minimum Price (€)",
|
|
|
|
|
|
"lowStockThreshold": "Low Stock Threshold",
|
|
|
|
|
|
"reorderPoint": "Reorder Point",
|
|
|
|
|
|
"reorderQuantity": "Reorder Quantity",
|
|
|
|
|
|
"maxStockLevel": "Max Stock Level",
|
|
|
|
|
|
"leadTimeDays": "Lead Time (days)",
|
|
|
|
|
|
"packageSize": "Package Size",
|
|
|
|
|
|
"packageSizePlaceholder": "E.g., 25kg bag, 12-pack",
|
|
|
|
|
|
"shelfLifeDays": "Shelf Life (days)",
|
|
|
|
|
|
"displayLifeHours": "Display Life (hours)",
|
|
|
|
|
|
"storageTempRange": "Storage Temp Range (°C)",
|
|
|
|
|
|
"storageTempMin": "Min",
|
|
|
|
|
|
"storageTempMax": "Max",
|
|
|
|
|
|
"storageInstructions": "Storage Instructions",
|
|
|
|
|
|
"storageInstructionsPlaceholder": "E.g., Store in cool, dry place away from direct sunlight",
|
|
|
|
|
|
"handlingInstructions": "Handling Instructions",
|
|
|
|
|
|
"handlingInstructionsPlaceholder": "Special handling requirements",
|
|
|
|
|
|
"isPerishable": "Perishable Item",
|
|
|
|
|
|
"preferredSupplierId": "Preferred Supplier ID",
|
|
|
|
|
|
"preferredSupplierIdPlaceholder": "Supplier ID",
|
|
|
|
|
|
"supplierProductCode": "Supplier Product Code",
|
|
|
|
|
|
"supplierProductCodePlaceholder": "Supplier's product code",
|
|
|
|
|
|
"allergenInfo": "Allergen Information",
|
|
|
|
|
|
"allergenInfoPlaceholder": "gluten, milk, eggs",
|
|
|
|
|
|
"nutritionalInfo": "Nutritional Information",
|
|
|
|
|
|
"nutritionalInfoPlaceholder": "calories:250, protein:8g, carbs:45g",
|
|
|
|
|
|
"certifications": "Certifications",
|
|
|
|
|
|
"certificationsPlaceholder": "Organic, Non-GMO, Kosher",
|
|
|
|
|
|
"weight": "Weight (kg)",
|
|
|
|
|
|
"volume": "Volume (L)",
|
|
|
|
|
|
"dimensions": "Dimensions (L×W×H cm)",
|
|
|
|
|
|
"dimensionsPlaceholder": "30×20×15",
|
|
|
|
|
|
"color": "Color",
|
|
|
|
|
|
"colorPlaceholder": "Product color",
|
|
|
|
|
|
"isActive": "Active Item",
|
|
|
|
|
|
"trackByLot": "Track by Lot/Batch",
|
|
|
|
|
|
"trackByExpiry": "Track by Expiry Date",
|
|
|
|
|
|
"allowNegativeStock": "Allow Negative Stock",
|
|
|
|
|
|
"notes": "Notes",
|
|
|
|
|
|
"notesPlaceholder": "Additional notes about this item",
|
|
|
|
|
|
"tags": "Tags",
|
|
|
|
|
|
"tagsPlaceholder": "organic, premium, seasonal",
|
|
|
|
|
|
"customFields": "Custom Fields (JSON)",
|
|
|
|
|
|
"customFieldsPlaceholder": "{\"custom_field\": \"value\"}"
|
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": "Basic Information",
|
|
|
|
|
|
"advancedOptions": "Advanced Options",
|
|
|
|
|
|
"advancedOptionsDescription": "Optional fields for comprehensive inventory management",
|
2025-11-15 21:21:06 +01:00
|
|
|
|
"additionalInformationDescription": "Optional product identifiers",
|
|
|
|
|
|
"additionalDetails": "Additional Details",
|
|
|
|
|
|
"additionalDetailsDescription": "Optional product details",
|
|
|
|
|
|
"advancedStockSettings": "Advanced Stock Settings",
|
|
|
|
|
|
"advancedStockSettingsDescription": "Configure inventory thresholds and reorder points",
|
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": "Pricing Information",
|
|
|
|
|
|
"inventoryManagement": "Inventory Management",
|
|
|
|
|
|
"productInformation": "Product Information",
|
|
|
|
|
|
"storageAndHandling": "Storage & Handling",
|
|
|
|
|
|
"supplierInformation": "Supplier Information",
|
|
|
|
|
|
"qualityAndCompliance": "Quality & Compliance",
|
|
|
|
|
|
"physicalProperties": "Physical Properties",
|
|
|
|
|
|
"statusAndTracking": "Status & Tracking",
|
|
|
|
|
|
"additionalInformation": "Additional Information"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productTypes": {
|
|
|
|
|
|
"ingredient": "Ingredient",
|
|
|
|
|
|
"finished_product": "Finished Product",
|
|
|
|
|
|
"packaging": "Packaging",
|
|
|
|
|
|
"consumable": "Consumable"
|
|
|
|
|
|
},
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"select": "Select...",
|
|
|
|
|
|
"kg": "Kilograms (kg)",
|
|
|
|
|
|
"g": "Grams (g)",
|
|
|
|
|
|
"l": "Liters (L)",
|
|
|
|
|
|
"ml": "Milliliters (ml)",
|
|
|
|
|
|
"units": "Units",
|
|
|
|
|
|
"dozen": "Dozen",
|
|
|
|
|
|
"lb": "Pounds (lb)",
|
|
|
|
|
|
"oz": "Ounces (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": "Select...",
|
|
|
|
|
|
"flour": "Flours",
|
|
|
|
|
|
"dairy": "Dairy",
|
|
|
|
|
|
"eggs": "Eggs",
|
|
|
|
|
|
"fats": "Fats & Oils",
|
|
|
|
|
|
"sweeteners": "Sweeteners",
|
|
|
|
|
|
"additives": "Additives",
|
|
|
|
|
|
"fruits": "Fruits",
|
|
|
|
|
|
"nuts": "Nuts & Seeds",
|
|
|
|
|
|
"spices": "Spices",
|
|
|
|
|
|
"leavening": "Leavening Agents"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productCategories": {
|
|
|
|
|
|
"select": "Select...",
|
|
|
|
|
|
"bread": "Bread",
|
|
|
|
|
|
"pastry": "Pastry",
|
|
|
|
|
|
"cake": "Cakes",
|
|
|
|
|
|
"cookies": "Cookies",
|
|
|
|
|
|
"specialty": "Specialty Items"
|
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": "Add Quality Template",
|
|
|
|
|
|
"templateDetails": "Quality Template Details",
|
|
|
|
|
|
"fillRequiredInfo": "Fill in the required information to create a quality check template",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"selectCheckType": "Select Quality Check Type",
|
|
|
|
|
|
"selectCheckTypeDescription": "Choose the type of quality check you want to create",
|
|
|
|
|
|
"essentialConfiguration": "Essential Configuration",
|
|
|
|
|
|
"essentialConfigurationDescription": "Define the core properties of your quality check template",
|
|
|
|
|
|
"criteriaAndSettings": "Quality Criteria & Settings",
|
|
|
|
|
|
"criteriaAndSettingsDescription": "Configure scoring methods and advanced quality criteria",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"checkType": "Check Type",
|
|
|
|
|
|
"essentialConfiguration": "Configuration",
|
|
|
|
|
|
"criteriaSettings": "Criteria & Settings"
|
|
|
|
|
|
},
|
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": "Name",
|
|
|
|
|
|
"namePlaceholder": "E.g., Bread Quality Control, Hygiene Inspection",
|
|
|
|
|
|
"checkType": "Check Type",
|
|
|
|
|
|
"weight": "Weight",
|
|
|
|
|
|
"weightTooltip": "Importance weight for scoring (0.0-10.0)",
|
|
|
|
|
|
"templateCode": "Template Code",
|
|
|
|
|
|
"templateCodePlaceholder": "Leave empty for auto-generation",
|
|
|
|
|
|
"templateCodeTooltip": "Leave empty to auto-generate from backend, or enter custom code",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"category": "Category",
|
|
|
|
|
|
"categoryPlaceholder": "E.g., appearance, structure, texture",
|
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": "Version",
|
|
|
|
|
|
"description": "Description",
|
|
|
|
|
|
"descriptionPlaceholder": "Detailed description of the quality check template",
|
|
|
|
|
|
"applicableStages": "Applicable Stages",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"applicableStagesTooltip": "Select the production stages where this quality check applies",
|
|
|
|
|
|
"applicableStagesHelp": "Leave empty to apply to all stages",
|
|
|
|
|
|
"applicablePlaceholder": "mixing, proofing, baking, cooling",
|
|
|
|
|
|
"instructions": "Instructions",
|
|
|
|
|
|
"instructionsPlaceholder": "Step-by-step instructions for performing this quality check",
|
|
|
|
|
|
"minValue": "Minimum Value",
|
|
|
|
|
|
"maxValue": "Maximum Value",
|
|
|
|
|
|
"targetValue": "Target Value",
|
|
|
|
|
|
"unit": "Unit",
|
|
|
|
|
|
"unitPlaceholder": "E.g., °C, g, cm, %",
|
|
|
|
|
|
"tolerancePercentage": "Tolerance Percentage",
|
|
|
|
|
|
"toleranceTooltip": "Acceptable deviation from target value (0-100%)",
|
|
|
|
|
|
"scoringMethod": "Scoring Method",
|
|
|
|
|
|
"passThreshold": "Pass Threshold (%)",
|
|
|
|
|
|
"passThresholdTooltip": "Minimum score percentage required to pass (0-100%)",
|
|
|
|
|
|
"frequencyDays": "Frequency (days)",
|
|
|
|
|
|
"frequencyDaysTooltip": "How often this check should be performed (in days)",
|
|
|
|
|
|
"frequencyDaysPlaceholder": "Leave empty for batch-based",
|
|
|
|
|
|
"requiredCheck": "Required Check",
|
|
|
|
|
|
"checkPointsJsonArray": "Check Points (JSON Array)",
|
|
|
|
|
|
"checkPointsTooltip": "Array of check points: [{\"name\": \"Visual Check\", \"description\": \"...\", \"weight\": 1.0}]",
|
|
|
|
|
|
"checkPointsPlaceholder": "[{\"name\": \"Visual Inspection\", \"description\": \"Check appearance\", \"expected_value\": \"Golden brown\", \"measurement_type\": \"visual\", \"is_critical\": false, \"weight\": 1.0}]",
|
|
|
|
|
|
"acceptanceCriteria": "Acceptance Criteria",
|
|
|
|
|
|
"acceptanceCriteriaPlaceholder": "E.g., Golden uniform color, fluffy texture, no burns...",
|
|
|
|
|
|
"parametersJson": "Parameters (JSON)",
|
|
|
|
|
|
"parametersTooltip": "Template parameters: {\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"parametersPlaceholder": "{\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"thresholdsJson": "Thresholds (JSON)",
|
|
|
|
|
|
"thresholdsTooltip": "Threshold values: {\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"thresholdsPlaceholder": "{\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"scoringCriteriaJson": "Scoring Criteria (JSON)",
|
|
|
|
|
|
"scoringCriteriaTooltip": "Custom scoring criteria: {\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"scoringCriteriaPlaceholder": "{\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"responsibleRole": "Responsible Role/Person",
|
|
|
|
|
|
"responsibleRolePlaceholder": "E.g., Production Manager, Baker",
|
|
|
|
|
|
"requiredEquipment": "Required Equipment/Tools",
|
|
|
|
|
|
"requiredEquipmentPlaceholder": "E.g., Thermometer, scale, timer",
|
|
|
|
|
|
"specificConditions": "Specific Conditions or Notes",
|
|
|
|
|
|
"specificConditionsPlaceholder": "E.g., Only applicable on humid days, check 30 min after baking...",
|
|
|
|
|
|
"activeTemplate": "Active Template",
|
|
|
|
|
|
"requiresPhotoEvidence": "Requires Photo Evidence",
|
|
|
|
|
|
"criticalControlPoint": "Critical Control Point (CCP)",
|
|
|
|
|
|
"notifyOnFailure": "Notify on Failure"
|
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": "Visual Inspection",
|
|
|
|
|
|
"measurement": "Measurement",
|
|
|
|
|
|
"temperature": "Temperature",
|
|
|
|
|
|
"weight": "Weight",
|
|
|
|
|
|
"boolean": "Pass/Fail Check",
|
|
|
|
|
|
"timing": "Timing",
|
|
|
|
|
|
"checklist": "Checklist"
|
|
|
|
|
|
},
|
|
|
|
|
|
"checkTypeDescriptions": {
|
|
|
|
|
|
"visual": "Inspect appearance, color, and visual quality characteristics",
|
|
|
|
|
|
"measurement": "Measure specific dimensions, sizes, or quantities",
|
|
|
|
|
|
"temperature": "Monitor and verify temperature readings",
|
|
|
|
|
|
"weight": "Check weight and mass measurements",
|
|
|
|
|
|
"boolean": "Simple yes/no or pass/fail checks",
|
|
|
|
|
|
"timing": "Track time-based quality criteria",
|
|
|
|
|
|
"checklist": "Multi-point checklist verification"
|
|
|
|
|
|
},
|
|
|
|
|
|
"processStages": {
|
|
|
|
|
|
"mixing": "Mixing",
|
|
|
|
|
|
"proofing": "Proofing",
|
|
|
|
|
|
"shaping": "Shaping",
|
|
|
|
|
|
"baking": "Baking",
|
|
|
|
|
|
"cooling": "Cooling",
|
|
|
|
|
|
"packaging": "Packaging",
|
|
|
|
|
|
"finishing": "Finishing"
|
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": "Basic Information",
|
2025-11-20 19:14:49 +01:00
|
|
|
|
"additionalIdentifiers": "Additional Identifiers",
|
|
|
|
|
|
"additionalIdentifiersDescription": "Optional identifiers for organization",
|
|
|
|
|
|
"measurementSpecifications": "Measurement Specifications",
|
|
|
|
|
|
"additionalDetails": "Additional Details",
|
|
|
|
|
|
"additionalDetailsDescription": "Optional detailed instructions",
|
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": "Scoring Configuration",
|
|
|
|
|
|
"advancedOptions": "Advanced Options",
|
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": "Optional fields for comprehensive quality template configuration",
|
|
|
|
|
|
"checkPointsConfiguration": "Check Points Configuration",
|
|
|
|
|
|
"advancedConfiguration": "Advanced Configuration (JSONB)",
|
|
|
|
|
|
"responsibilityRequirements": "Responsibility & Requirements",
|
|
|
|
|
|
"controlSettings": "Control Settings"
|
|
|
|
|
|
},
|
|
|
|
|
|
"scoringMethods": {
|
|
|
|
|
|
"scoringMethod": "Scoring Method",
|
|
|
|
|
|
"weightedAverage": "Weighted Average",
|
|
|
|
|
|
"passFail": "Pass/Fail",
|
|
|
|
|
|
"percentage": "Percentage",
|
|
|
|
|
|
"pointsBased": "Points-based"
|
|
|
|
|
|
},
|
|
|
|
|
|
"advancedFields": {
|
|
|
|
|
|
"checkPointsJsonArray": "Check Points (JSON Array)",
|
|
|
|
|
|
"checkPointsTooltip": "Array of check points: [{\"name\": \"Visual Check\", \"description\": \"...\", \"weight\": 1.0}]",
|
|
|
|
|
|
"checkPointsPlaceholder": "[{\"name\": \"Visual Inspection\", \"description\": \"Check appearance\", \"expected_value\": \"Golden brown\", \"measurement_type\": \"visual\", \"is_critical\": false, \"weight\": 1.0}]",
|
|
|
|
|
|
"acceptanceCriteria": "Acceptance Criteria",
|
|
|
|
|
|
"acceptanceCriteriaPlaceholder": "E.g., Golden uniform color, fluffy texture, no burns...",
|
|
|
|
|
|
"parametersJson": "Parameters (JSON)",
|
|
|
|
|
|
"parametersTooltip": "Template parameters: {\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"parametersPlaceholder": "{\"temp_min\": 75, \"temp_max\": 85, \"humidity\": 65}",
|
|
|
|
|
|
"thresholdsJson": "Thresholds (JSON)",
|
|
|
|
|
|
"thresholdsTooltip": "Threshold values: {\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"thresholdsPlaceholder": "{\"critical\": 90, \"warning\": 70, \"acceptable\": 50}",
|
|
|
|
|
|
"scoringCriteriaJson": "Scoring Criteria (JSON)",
|
|
|
|
|
|
"scoringCriteriaTooltip": "Custom scoring criteria: {\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"scoringCriteriaPlaceholder": "{\"appearance\": 30, \"texture\": 30, \"taste\": 40}",
|
|
|
|
|
|
"responsibleRole": "Responsible Role/Person",
|
|
|
|
|
|
"responsibleRolePlaceholder": "E.g., Production Manager, Baker",
|
|
|
|
|
|
"requiredEquipment": "Required Equipment/Tools",
|
|
|
|
|
|
"requiredEquipmentPlaceholder": "E.g., Thermometer, scale, timer",
|
|
|
|
|
|
"specificConditions": "Specific Conditions or Notes",
|
|
|
|
|
|
"specificConditionsPlaceholder": "E.g., Only applicable on humid days, check 30 min after baking...",
|
|
|
|
|
|
"passThresholdPercent": "Pass Threshold (%)",
|
|
|
|
|
|
"frequencyDays": "Frequency (days)",
|
|
|
|
|
|
"frequencyPlaceholder": "Leave empty for batch-based",
|
|
|
|
|
|
"requiredCheck": "Required Check",
|
|
|
|
|
|
"activeTemplate": "Active Template",
|
|
|
|
|
|
"requiresPhotoEvidence": "Requires Photo Evidence",
|
|
|
|
|
|
"criticalControlPoint": "Critical Control Point (CCP)",
|
|
|
|
|
|
"notifyOnFailure": "Notify on Failure",
|
|
|
|
|
|
"templateDetailsTitle": "Template Details"
|
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": "Add Order",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"customerSelection": "Customer Selection",
|
|
|
|
|
|
"orderItems": "Order Items",
|
|
|
|
|
|
"deliveryAndPayment": "Delivery & Payment"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerSelection": {
|
|
|
|
|
|
"title": "Select or Create Customer",
|
|
|
|
|
|
"subtitle": "Choose an existing customer or create a new one",
|
|
|
|
|
|
"searchPlaceholder": "Search customers...",
|
|
|
|
|
|
"createNew": "Create new customer",
|
|
|
|
|
|
"backToList": "← Back to customer list",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"customerName": "Customer Name",
|
|
|
|
|
|
"customerNamePlaceholder": "E.g., The Mill Restaurant",
|
|
|
|
|
|
"customerType": "Customer Type",
|
|
|
|
|
|
"phone": "Phone",
|
|
|
|
|
|
"phonePlaceholder": "+34 123 456 789",
|
|
|
|
|
|
"email": "Email",
|
|
|
|
|
|
"emailPlaceholder": "contact@restaurant.com"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customerTypes": {
|
|
|
|
|
|
"retail": "Retail",
|
|
|
|
|
|
"wholesale": "Wholesale",
|
|
|
|
|
|
"event": "Event",
|
|
|
|
|
|
"restaurant": "Restaurant"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"title": "Add Products to Order",
|
|
|
|
|
|
"subtitle": "Select products and quantities",
|
|
|
|
|
|
"addItem": "Add Item",
|
|
|
|
|
|
"removeItem": "Remove item",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"product": "Product",
|
|
|
|
|
|
"productPlaceholder": "Select product...",
|
|
|
|
|
|
"quantity": "Quantity",
|
|
|
|
|
|
"unitPrice": "Unit Price (€)",
|
|
|
|
|
|
"customRequirements": "Custom Requirements",
|
|
|
|
|
|
"customRequirementsPlaceholder": "Special instructions...",
|
|
|
|
|
|
"subtotal": "Subtotal"
|
|
|
|
|
|
},
|
|
|
|
|
|
"total": "Total Amount"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryPayment": {
|
|
|
|
|
|
"title": "Delivery & Payment Details",
|
|
|
|
|
|
"subtitle": "Configure delivery, payment, and order details",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"requestedDeliveryDate": "Requested Delivery Date",
|
|
|
|
|
|
"orderNumber": "Order Number",
|
|
|
|
|
|
"orderNumberTooltip": "Automatically generated by backend on order creation (format: ORD-YYYYMMDD-####)",
|
|
|
|
|
|
"status": "Status",
|
|
|
|
|
|
"orderType": "Order Type",
|
|
|
|
|
|
"priority": "Priority"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sections": {
|
2025-11-10 13:37:20 +00:00
|
|
|
|
"basicInfo": "Basic Order Information",
|
|
|
|
|
|
"deliveryInfo": "Delivery Details",
|
|
|
|
|
|
"paymentInfo": "Payment Details",
|
|
|
|
|
|
"orderSummary": "Order Summary",
|
|
|
|
|
|
"advancedOptions": "Advanced Options",
|
|
|
|
|
|
"advancedOptionsDescription": "Optional fields for comprehensive order management",
|
|
|
|
|
|
"pricingDetails": "Pricing Details",
|
|
|
|
|
|
"productionScheduling": "Production & Scheduling",
|
|
|
|
|
|
"fulfillmentTracking": "Fulfillment & Tracking",
|
|
|
|
|
|
"sourceChannel": "Source & Channel",
|
|
|
|
|
|
"communicationNotes": "Communication & Notes",
|
|
|
|
|
|
"notifications": "Notifications",
|
|
|
|
|
|
"qualityRequirements": "Quality & Requirements",
|
|
|
|
|
|
"additionalOptions": "Additional Options"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderTypes": {
|
|
|
|
|
|
"standard": "Standard",
|
|
|
|
|
|
"custom": "Custom",
|
|
|
|
|
|
"bulk": "Bulk",
|
|
|
|
|
|
"urgent": "Urgent"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Low",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "High",
|
|
|
|
|
|
"urgent": "Urgent"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"pending": "Pending",
|
|
|
|
|
|
"confirmed": "Confirmed",
|
|
|
|
|
|
"in_production": "In Production",
|
|
|
|
|
|
"ready": "Ready",
|
|
|
|
|
|
"delivered": "Delivered"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryMethods": {
|
|
|
|
|
|
"pickup": "Pickup",
|
|
|
|
|
|
"pickupDesc": "Customer pickup",
|
|
|
|
|
|
"delivery": "Delivery",
|
|
|
|
|
|
"deliveryDesc": "Home delivery",
|
|
|
|
|
|
"shipping": "Shipping",
|
|
|
|
|
|
"shippingDesc": "Courier service"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentMethods": {
|
|
|
|
|
|
"cash": "Cash",
|
|
|
|
|
|
"card": "Card",
|
|
|
|
|
|
"bank_transfer": "Bank Transfer",
|
|
|
|
|
|
"invoice": "Invoice",
|
|
|
|
|
|
"account": "Account"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentTerms": {
|
|
|
|
|
|
"immediate": "Immediate",
|
|
|
|
|
|
"net_30": "Net 30",
|
|
|
|
|
|
"net_60": "Net 60"
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentStatuses": {
|
|
|
|
|
|
"pending": "Pending",
|
|
|
|
|
|
"partial": "Partial",
|
|
|
|
|
|
"paid": "Paid",
|
|
|
|
|
|
"overdue": "Overdue"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderSources": {
|
|
|
|
|
|
"manual": "Manual",
|
|
|
|
|
|
"phone": "Phone",
|
|
|
|
|
|
"email": "Email",
|
|
|
|
|
|
"website": "Website",
|
|
|
|
|
|
"app": "Mobile App"
|
|
|
|
|
|
},
|
|
|
|
|
|
"salesChannels": {
|
|
|
|
|
|
"direct": "Direct",
|
|
|
|
|
|
"wholesale": "Wholesale",
|
|
|
|
|
|
"retail": "Retail",
|
|
|
|
|
|
"online": "Online"
|
|
|
|
|
|
},
|
|
|
|
|
|
"qualityCheckStatuses": {
|
|
|
|
|
|
"not_started": "Not Started",
|
|
|
|
|
|
"pending": "Pending",
|
|
|
|
|
|
"passed": "Passed",
|
|
|
|
|
|
"failed": "Failed"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"loadingCustomers": "Loading customers...",
|
|
|
|
|
|
"loadingProducts": "Loading products...",
|
|
|
|
|
|
"errorLoadingCustomers": "Error loading customers",
|
|
|
|
|
|
"errorLoadingProducts": "Error loading products",
|
|
|
|
|
|
"noCustomersFound": "No customers found",
|
|
|
|
|
|
"tryDifferentSearch": "Try a different search term",
|
|
|
|
|
|
"noProductsInOrder": "No products in order",
|
|
|
|
|
|
"clickAddProduct": "Click \"Add Product\" to start",
|
|
|
|
|
|
"newCustomer": "New Customer",
|
|
|
|
|
|
"customer": "Customer",
|
|
|
|
|
|
"products": "Products",
|
|
|
|
|
|
"items": "items",
|
|
|
|
|
|
"total": "Total",
|
|
|
|
|
|
"productNumber": "Product #",
|
|
|
|
|
|
"searchByName": "Search customer by name...",
|
|
|
|
|
|
"selectCustomer": "Select Customer",
|
|
|
|
|
|
"searchForCustomer": "Search for an existing customer or create a new one",
|
|
|
|
|
|
"orderItems": "Order Items",
|
|
|
|
|
|
"addProducts": "Add Products to Order",
|
|
|
|
|
|
"customerLabel": "Customer:",
|
|
|
|
|
|
"productsLabel": "Products:",
|
|
|
|
|
|
"totalLabel": "Total:",
|
|
|
|
|
|
"orderTotal": "Order Total:",
|
|
|
|
|
|
"newCustomerHeader": "New Customer",
|
|
|
|
|
|
"orderProducts": "Order Products",
|
|
|
|
|
|
"addProduct": "Add Product",
|
|
|
|
|
|
"removeItem": "Remove item",
|
|
|
|
|
|
"optionalEmail": "Email (Optional)",
|
|
|
|
|
|
"readOnlyAutoGenerated": "Order Number (Read-only - Auto-generated)",
|
|
|
|
|
|
"willBeGeneratedAutomatically": "Will be generated automatically",
|
|
|
|
|
|
"autoGeneratedOnSave": "Auto-generated on save",
|
|
|
|
|
|
"orderNumberFormat": "format: ORD-YYYYMMDD-####",
|
|
|
|
|
|
"selectProduct": "Select product...",
|
|
|
|
|
|
"deliveryAddress": "Delivery Address",
|
|
|
|
|
|
"deliveryAddressPlaceholder": "Street, number, floor, postal code, city...",
|
|
|
|
|
|
"deliveryContactName": "Delivery Contact Name",
|
|
|
|
|
|
"deliveryContactNamePlaceholder": "Contact person",
|
|
|
|
|
|
"deliveryContactPhone": "Delivery Contact Phone",
|
|
|
|
|
|
"deliveryMethod": "Delivery Method",
|
|
|
|
|
|
"paymentMethod": "Payment Method",
|
|
|
|
|
|
"paymentTerms": "Payment Terms",
|
|
|
|
|
|
"paymentStatus": "Payment Status",
|
|
|
|
|
|
"paymentDueDate": "Payment Due Date",
|
|
|
|
|
|
"discountPercent": "Discount (%)",
|
|
|
|
|
|
"deliveryFee": "Delivery Fee (€)",
|
|
|
|
|
|
"productionStartDate": "Production Start Date",
|
|
|
|
|
|
"productionDueDate": "Production Due Date",
|
|
|
|
|
|
"productionBatchNumber": "Production Batch Number",
|
|
|
|
|
|
"productionBatchNumberPlaceholder": "BATCH-001",
|
|
|
|
|
|
"deliveryTimeWindow": "Delivery Time Window",
|
|
|
|
|
|
"deliveryTimeWindowPlaceholder": "E.g., 9:00 AM - 11:00 AM",
|
|
|
|
|
|
"productionNotes": "Production Notes",
|
|
|
|
|
|
"productionNotesPlaceholder": "Special production requirements or notes",
|
|
|
|
|
|
"shippingTrackingNumber": "Shipping Tracking Number",
|
|
|
|
|
|
"shippingTrackingNumberPlaceholder": "Tracking number",
|
|
|
|
|
|
"shippingCarrier": "Shipping Carrier",
|
|
|
|
|
|
"shippingCarrierPlaceholder": "E.g., DHL, UPS, FedEx",
|
|
|
|
|
|
"pickupLocation": "Pickup Location",
|
|
|
|
|
|
"pickupLocationPlaceholder": "Store location for pickup",
|
|
|
|
|
|
"actualDeliveryDate": "Actual Delivery Date",
|
|
|
|
|
|
"orderSource": "Order Source",
|
|
|
|
|
|
"salesChannel": "Sales Channel",
|
|
|
|
|
|
"salesRepId": "Sales Representative ID",
|
|
|
|
|
|
"salesRepIdPlaceholder": "Sales rep ID or name",
|
|
|
|
|
|
"customerPurchaseOrder": "Customer Purchase Order #",
|
|
|
|
|
|
"customerPurchaseOrderPlaceholder": "Customer's PO number",
|
|
|
|
|
|
"deliveryInstructions": "Delivery Instructions",
|
|
|
|
|
|
"deliveryInstructionsPlaceholder": "Special delivery instructions",
|
|
|
|
|
|
"specialInstructions": "Special Instructions",
|
|
|
|
|
|
"specialInstructionsPlaceholder": "Any special requirements or instructions",
|
|
|
|
|
|
"internalNotes": "Internal Notes",
|
|
|
|
|
|
"internalNotesPlaceholder": "Internal notes (not visible to customer)",
|
|
|
|
|
|
"customerNotes": "Customer Notes",
|
|
|
|
|
|
"customerNotesPlaceholder": "Notes from/for the customer",
|
|
|
|
|
|
"notifyOnStatusChange": "Notify on Status Change",
|
|
|
|
|
|
"notifyOnDelivery": "Notify on Delivery",
|
|
|
|
|
|
"notificationEmail": "Notification Email",
|
|
|
|
|
|
"notificationEmailPlaceholder": "customer@email.com",
|
|
|
|
|
|
"notificationPhone": "Notification Phone",
|
|
|
|
|
|
"qualityCheckRequired": "Quality Check Required",
|
|
|
|
|
|
"qualityCheckStatus": "Quality Check Status",
|
|
|
|
|
|
"packagingInstructions": "Packaging Instructions",
|
|
|
|
|
|
"packagingInstructionsPlaceholder": "Special packaging requirements",
|
|
|
|
|
|
"labelingRequirements": "Labeling Requirements",
|
|
|
|
|
|
"labelingRequirementsPlaceholder": "Custom label requirements",
|
|
|
|
|
|
"recurringOrder": "Recurring Order",
|
|
|
|
|
|
"recurringSchedule": "Recurring Schedule",
|
|
|
|
|
|
"recurringSchedulePlaceholder": "E.g., Weekly on Mondays, Every 2 weeks",
|
|
|
|
|
|
"tags": "Tags",
|
|
|
|
|
|
"tagsPlaceholder": "urgent, vip, wholesale",
|
|
|
|
|
|
"tagsTooltip": "Comma-separated tags for easier search and filtering",
|
|
|
|
|
|
"metadata": "Metadata (JSON)",
|
|
|
|
|
|
"metadataPlaceholder": "{\"custom_field\": \"value\"}",
|
|
|
|
|
|
"metadataTooltip": "Additional custom data in JSON format"
|
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": "Select Type",
|
|
|
|
|
|
"description": "Choose what you want to add",
|
|
|
|
|
|
"types": {
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inventory",
|
|
|
|
|
|
"description": "Add ingredients or products to your inventory"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Supplier",
|
|
|
|
|
|
"description": "Add a new supplier or vendor"
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Recipe",
|
|
|
|
|
|
"description": "Create a new recipe or formula"
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Equipment",
|
|
|
|
|
|
"description": "Register bakery equipment or machinery"
|
|
|
|
|
|
},
|
|
|
|
|
|
"quality-template": {
|
|
|
|
|
|
"title": "Quality Template",
|
|
|
|
|
|
"description": "Create a quality check template"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer-order": {
|
|
|
|
|
|
"title": "Customer Order",
|
|
|
|
|
|
"description": "Create a new customer order"
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Customer",
|
|
|
|
|
|
"description": "Add a new customer"
|
|
|
|
|
|
},
|
|
|
|
|
|
"team-member": {
|
|
|
|
|
|
"title": "Team Member",
|
|
|
|
|
|
"description": "Add a team member or employee"
|
|
|
|
|
|
},
|
|
|
|
|
|
"sales-entry": {
|
|
|
|
|
|
"title": "Sales Entry",
|
|
|
|
|
|
"description": "Record a sales transaction"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-11-18 07:17:17 +01:00
|
|
|
|
"salesEntry": {
|
|
|
|
|
|
"title": "Sales Record",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"entryMethod": "Entry Method",
|
|
|
|
|
|
"entryMethodDescription": "Choose how to register sales",
|
|
|
|
|
|
"manualEntry": "Enter Data",
|
|
|
|
|
|
"manualEntryDescription": "Record sale details",
|
|
|
|
|
|
"fileUpload": "Upload File",
|
|
|
|
|
|
"fileUploadDescription": "Import sales from file",
|
|
|
|
|
|
"review": "Review",
|
|
|
|
|
|
"reviewDescription": "Confirm data before saving"
|
|
|
|
|
|
},
|
|
|
|
|
|
"entryMethod": {
|
|
|
|
|
|
"title": "How do you want to register sales?",
|
|
|
|
|
|
"subtitle": "Choose the method that best suits your needs",
|
|
|
|
|
|
"manual": {
|
|
|
|
|
|
"title": "Manual Entry",
|
|
|
|
|
|
"description": "Enter one or more sales individually",
|
|
|
|
|
|
"benefits": {
|
|
|
|
|
|
"1": "Ideal for daily totals",
|
|
|
|
|
|
"2": "Detailed control per sale",
|
|
|
|
|
|
"3": "Easy and fast"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"file": {
|
|
|
|
|
|
"title": "Upload File",
|
|
|
|
|
|
"description": "Import from Excel or CSV",
|
|
|
|
|
|
"recommended": "⭐ Recommended for historical data",
|
|
|
|
|
|
"benefits": {
|
|
|
|
|
|
"1": "Ideal for historical data",
|
|
|
|
|
|
"2": "Bulk upload (hundreds of records)",
|
|
|
|
|
|
"3": "Saves significant time"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"manualEntry": {
|
|
|
|
|
|
"title": "Record Manual Sale",
|
|
|
|
|
|
"subtitle": "Enter sale details",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"saleDate": "Sale Date",
|
|
|
|
|
|
"paymentMethod": "Payment Method",
|
|
|
|
|
|
"notes": "Notes (Optional)",
|
|
|
|
|
|
"notesPlaceholder": "Additional information about this sale..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"products": {
|
|
|
|
|
|
"title": "Products Sold",
|
|
|
|
|
|
"addProduct": "+ Add Product",
|
|
|
|
|
|
"loading": "Loading products...",
|
|
|
|
|
|
"noFinishedProducts": "No finished products available",
|
|
|
|
|
|
"addToInventory": "Add products to inventory first",
|
|
|
|
|
|
"noProductsAdded": "No products added",
|
|
|
|
|
|
"clickToBegin": "Click 'Add Product' to begin",
|
|
|
|
|
|
"selectProduct": "Select product...",
|
|
|
|
|
|
"quantity": "Qty.",
|
|
|
|
|
|
"price": "Price",
|
|
|
|
|
|
"removeProduct": "Remove product",
|
|
|
|
|
|
"total": "Total:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"fileUpload": {
|
|
|
|
|
|
"title": "Upload Sales File",
|
|
|
|
|
|
"subtitle": "Import your sales from Excel or CSV",
|
|
|
|
|
|
"downloadTemplate": "Download CSV Template",
|
|
|
|
|
|
"downloading": "Downloading...",
|
|
|
|
|
|
"dragDrop": {
|
|
|
|
|
|
"title": "Drag a file here",
|
|
|
|
|
|
"subtitle": "or click to select",
|
|
|
|
|
|
"button": "Select File",
|
|
|
|
|
|
"supportedFormats": "Supported formats: CSV, Excel (.xlsx, .xls)"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validated": {
|
|
|
|
|
|
"title": "✓ File validated successfully",
|
|
|
|
|
|
"recordsFound": "Records found:",
|
|
|
|
|
|
"validRecords": "Valid records:",
|
|
|
|
|
|
"errors": "Errors:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validateButton": "Validate File",
|
|
|
|
|
|
"validating": "Validating...",
|
|
|
|
|
|
"importButton": "Import Data",
|
|
|
|
|
|
"importing": "Importing...",
|
|
|
|
|
|
"instructions": {
|
|
|
|
|
|
"title": "The file must contain the columns:",
|
|
|
|
|
|
"columns": "date, product, quantity, unit_price, payment_method"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"title": "Review and Confirm",
|
|
|
|
|
|
"subtitle": "Verify that all information is correct",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"date": "Date:",
|
|
|
|
|
|
"paymentMethod": "Payment Method:",
|
|
|
|
|
|
"products": "Products",
|
|
|
|
|
|
"total": "Total:",
|
|
|
|
|
|
"notes": "Notes:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"imported": {
|
|
|
|
|
|
"title": "✓ File imported successfully",
|
|
|
|
|
|
"recordsImported": "Records imported:",
|
|
|
|
|
|
"recordsFailed": "Records failed:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"paymentMethods": {
|
|
|
|
|
|
"cash": "Cash",
|
|
|
|
|
|
"card": "Card",
|
|
|
|
|
|
"mobile": "Mobile Payment",
|
|
|
|
|
|
"transfer": "Transfer",
|
|
|
|
|
|
"other": "Other"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "Could not obtain tenant information",
|
|
|
|
|
|
"errorLoadingProducts": "Error loading products",
|
|
|
|
|
|
"salesEntryCreatedSuccessfully": "Sales entry created successfully",
|
|
|
|
|
|
"errorCreatingSalesEntry": "Error creating sales entry",
|
|
|
|
|
|
"errorValidatingFile": "Error validating file",
|
|
|
|
|
|
"errorImportingFile": "Error importing file",
|
|
|
|
|
|
"fileValidatedSuccessfully": "File validated successfully",
|
|
|
|
|
|
"fileImportedSuccessfully": "File imported successfully"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
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
|
|
|
|
"tooltips": {
|
|
|
|
|
|
"averageCost": "Average cost per unit based on purchase history",
|
|
|
|
|
|
"standardCost": "Standard/expected cost per unit for costing calculations",
|
|
|
|
|
|
"lowStockThreshold": "Alert when stock falls below this level",
|
|
|
|
|
|
"reorderPoint": "Trigger reorder when stock reaches this level",
|
|
|
|
|
|
"reorderQuantity": "Standard quantity to order when reordering",
|
|
|
|
|
|
"leadTime": "Time between order placement and delivery",
|
|
|
|
|
|
"displayLife": "Hours product can be displayed before quality degrades",
|
|
|
|
|
|
"allergenInfo": "Comma-separated list: e.g., gluten, milk, eggs, nuts",
|
|
|
|
|
|
"nutritionalInfo": "Key nutrition facts as comma-separated list",
|
|
|
|
|
|
"certifications": "Comma-separated list: e.g., Organic, Non-GMO, Kosher",
|
|
|
|
|
|
"tags": "Comma-separated tags for easier search and filtering",
|
|
|
|
|
|
"customFields": "Additional custom data in JSON format",
|
|
|
|
|
|
"passThreshold": "Minimum score required to pass (0-100)",
|
|
|
|
|
|
"frequencyDays": "How often this check should be performed (leave empty for batch-based)",
|
|
|
|
|
|
"checkPoints": "Array of check points",
|
|
|
|
|
|
"parameters": "Template parameters",
|
|
|
|
|
|
"thresholds": "Threshold values",
|
|
|
|
|
|
"scoringCriteria": "Custom scoring criteria"
|
2025-12-25 20:51:03 +01:00
|
|
|
|
},
|
|
|
|
|
|
"purchaseOrder": {
|
|
|
|
|
|
"title": "Add Purchase Order",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"supplierSelection": "Supplier Selection",
|
|
|
|
|
|
"supplierSelectionDescription": "Choose the supplier",
|
|
|
|
|
|
"orderItems": "Order Items",
|
|
|
|
|
|
"orderItemsDescription": "Products to order",
|
|
|
|
|
|
"deliveryDetails": "Delivery Details",
|
|
|
|
|
|
"deliveryDetailsDescription": "Delivery date and notes"
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplierSelection": {
|
|
|
|
|
|
"title": "Select Supplier",
|
|
|
|
|
|
"subtitle": "Choose the supplier for this purchase order",
|
|
|
|
|
|
"searchPlaceholder": "Search supplier by name or code...",
|
|
|
|
|
|
"loading": "Loading suppliers...",
|
|
|
|
|
|
"error": "Error loading suppliers",
|
|
|
|
|
|
"noSuppliersFound": "No suppliers found",
|
|
|
|
|
|
"tryDifferentSearch": "Try a different search term"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"title": "Order Items",
|
|
|
|
|
|
"subtitle": "Select products to order",
|
|
|
|
|
|
"addItem": "Add Item",
|
|
|
|
|
|
"removeItem": "Remove item",
|
|
|
|
|
|
"noItemsAdded": "No items added yet",
|
|
|
|
|
|
"clickToBegin": "Click 'Add Item' to get started",
|
|
|
|
|
|
"supplier": "Supplier",
|
|
|
|
|
|
"orderTotal": "Order Total",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"ingredient": "Ingredient",
|
|
|
|
|
|
"ingredientPlaceholder": "Select ingredient...",
|
|
|
|
|
|
"quantity": "Quantity",
|
|
|
|
|
|
"unitPrice": "Unit Price (€)",
|
|
|
|
|
|
"subtotal": "Subtotal",
|
|
|
|
|
|
"notes": "Notes",
|
|
|
|
|
|
"notesPlaceholder": "Additional notes for this item..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"loading": "Loading ingredients...",
|
|
|
|
|
|
"noIngredients": "No ingredients available",
|
|
|
|
|
|
"addToInventory": "Add ingredients to inventory first"
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryDetails": {
|
|
|
|
|
|
"title": "Delivery Details",
|
|
|
|
|
|
"subtitle": "Configure delivery date and additional notes",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"expectedDeliveryDate": "Expected Delivery Date",
|
|
|
|
|
|
"notes": "Order Notes",
|
|
|
|
|
|
"notesPlaceholder": "Special instructions, delivery requirements, etc.",
|
|
|
|
|
|
"orderNumber": "Order Number",
|
|
|
|
|
|
"orderNumberTooltip": "Will be auto-generated when creating the order",
|
|
|
|
|
|
"status": "Status",
|
|
|
|
|
|
"priority": "Priority"
|
|
|
|
|
|
},
|
|
|
|
|
|
"orderSummary": {
|
|
|
|
|
|
"title": "Order Summary",
|
|
|
|
|
|
"supplier": "Supplier:",
|
|
|
|
|
|
"items": "Items:",
|
|
|
|
|
|
"total": "Total:",
|
|
|
|
|
|
"deliveryDate": "Expected Delivery:"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"draft": "Draft",
|
|
|
|
|
|
"pending": "Pending",
|
|
|
|
|
|
"approved": "Approved",
|
|
|
|
|
|
"ordered": "Ordered",
|
|
|
|
|
|
"received": "Received",
|
|
|
|
|
|
"cancelled": "Cancelled"
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Low",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "High",
|
|
|
|
|
|
"urgent": "Urgent"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "Could not obtain tenant information",
|
|
|
|
|
|
"errorLoadingSuppliers": "Error loading suppliers",
|
|
|
|
|
|
"errorLoadingIngredients": "Error loading ingredients",
|
|
|
|
|
|
"purchaseOrderCreatedSuccessfully": "Purchase order created successfully",
|
|
|
|
|
|
"errorCreatingPurchaseOrder": "Error creating purchase order",
|
|
|
|
|
|
"selectSupplier": "Please select a supplier",
|
|
|
|
|
|
"addAtLeastOneItem": "Add at least one item to the order"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"productionBatch": {
|
|
|
|
|
|
"title": "Add Production Batch",
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"productRecipe": "Product & Recipe",
|
|
|
|
|
|
"productRecipeDescription": "Select what to produce",
|
|
|
|
|
|
"timing": "Scheduling",
|
|
|
|
|
|
"timingDescription": "Production dates",
|
|
|
|
|
|
"equipmentStaff": "Equipment & Staff",
|
|
|
|
|
|
"equipmentStaffDescription": "Assigned resources",
|
|
|
|
|
|
"additionalDetails": "Additional Details",
|
|
|
|
|
|
"additionalDetailsDescription": "Notes and configuration"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productRecipe": {
|
|
|
|
|
|
"title": "Select Product and Recipe",
|
|
|
|
|
|
"subtitle": "Choose the product to produce and optionally a recipe",
|
|
|
|
|
|
"loading": "Loading information...",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"product": "Product to Produce",
|
|
|
|
|
|
"productPlaceholder": "Select product...",
|
|
|
|
|
|
"recipe": "Recipe to Use (Optional)",
|
|
|
|
|
|
"recipePlaceholder": "No specific recipe",
|
|
|
|
|
|
"quantityToProduce": "Quantity to Produce",
|
|
|
|
|
|
"batchNumber": "Batch Number",
|
|
|
|
|
|
"batchNumberPlaceholder": "BATCH-001"
|
|
|
|
|
|
},
|
|
|
|
|
|
"noProducts": "No products available",
|
|
|
|
|
|
"addToInventory": "Add products to inventory first",
|
|
|
|
|
|
"recipeDetails": {
|
|
|
|
|
|
"title": "Recipe Details",
|
|
|
|
|
|
"yield": "Yield:",
|
|
|
|
|
|
"prepTime": "Prep Time:",
|
|
|
|
|
|
"cookTime": "Cook Time:",
|
|
|
|
|
|
"totalTime": "Total Time:",
|
|
|
|
|
|
"ingredients": "Ingredients:",
|
|
|
|
|
|
"minutes": "min"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"timing": {
|
|
|
|
|
|
"title": "Production Scheduling",
|
|
|
|
|
|
"subtitle": "Define production start and end dates",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"scheduledStartTime": "Start Date & Time",
|
|
|
|
|
|
"scheduledEndTime": "End Date & Time (Optional)",
|
|
|
|
|
|
"estimatedDuration": "Estimated Duration (minutes)",
|
|
|
|
|
|
"estimatedDurationPlaceholder": "120"
|
|
|
|
|
|
},
|
|
|
|
|
|
"summary": {
|
|
|
|
|
|
"product": "Product:",
|
|
|
|
|
|
"quantity": "Quantity:",
|
|
|
|
|
|
"recipe": "Recipe:",
|
|
|
|
|
|
"startTime": "Start:",
|
|
|
|
|
|
"duration": "Est. Duration:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipmentStaff": {
|
|
|
|
|
|
"title": "Equipment & Staff",
|
|
|
|
|
|
"subtitle": "Assign resources for this production",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"assignedEquipment": "Assigned Equipment",
|
|
|
|
|
|
"assignedEquipmentPlaceholder": "E.g., Oven #1, Mixer #2",
|
|
|
|
|
|
"assignedStaff": "Assigned Staff",
|
|
|
|
|
|
"assignedStaffPlaceholder": "E.g., John Doe, Jane Smith",
|
|
|
|
|
|
"supervisor": "Supervisor",
|
|
|
|
|
|
"supervisorPlaceholder": "Supervisor name"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"additionalDetails": {
|
|
|
|
|
|
"title": "Additional Details",
|
|
|
|
|
|
"subtitle": "Optional configuration and notes",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"priority": "Priority",
|
|
|
|
|
|
"status": "Status",
|
|
|
|
|
|
"productionStage": "Production Stage",
|
|
|
|
|
|
"notes": "Production Notes",
|
|
|
|
|
|
"notesPlaceholder": "Special instructions, observations, etc.",
|
|
|
|
|
|
"qualityCheckRequired": "Quality Check Required",
|
|
|
|
|
|
"qualityCheckNotes": "Quality Check Notes",
|
|
|
|
|
|
"qualityCheckNotesPlaceholder": "Specific control points..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"low": "Low",
|
|
|
|
|
|
"normal": "Normal",
|
|
|
|
|
|
"high": "High",
|
|
|
|
|
|
"urgent": "Urgent"
|
|
|
|
|
|
},
|
|
|
|
|
|
"statuses": {
|
|
|
|
|
|
"scheduled": "Scheduled",
|
|
|
|
|
|
"in_progress": "In Progress",
|
|
|
|
|
|
"completed": "Completed",
|
|
|
|
|
|
"on_hold": "On Hold",
|
|
|
|
|
|
"cancelled": "Cancelled"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stages": {
|
|
|
|
|
|
"mixing": "Mixing",
|
|
|
|
|
|
"proofing": "Proofing",
|
|
|
|
|
|
"shaping": "Shaping",
|
|
|
|
|
|
"baking": "Baking",
|
|
|
|
|
|
"cooling": "Cooling",
|
|
|
|
|
|
"packaging": "Packaging",
|
|
|
|
|
|
"finishing": "Finishing"
|
|
|
|
|
|
},
|
|
|
|
|
|
"summary": {
|
|
|
|
|
|
"title": "Production Batch Summary",
|
|
|
|
|
|
"product": "Product:",
|
|
|
|
|
|
"quantity": "Quantity:",
|
|
|
|
|
|
"recipe": "Recipe:",
|
|
|
|
|
|
"startTime": "Scheduled Start:",
|
|
|
|
|
|
"priority": "Priority:",
|
|
|
|
|
|
"equipment": "Equipment:",
|
|
|
|
|
|
"staff": "Staff:"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorObtainingTenantInfo": "Could not obtain tenant information",
|
|
|
|
|
|
"errorLoadingProducts": "Error loading products",
|
|
|
|
|
|
"errorLoadingRecipes": "Error loading recipes",
|
|
|
|
|
|
"productionBatchCreatedSuccessfully": "Production batch created successfully",
|
|
|
|
|
|
"errorCreatingProductionBatch": "Error creating production batch",
|
|
|
|
|
|
"selectProduct": "Please select a product",
|
|
|
|
|
|
"enterQuantity": "Enter a valid quantity"
|
|
|
|
|
|
},
|
|
|
|
|
|
"validation": {
|
|
|
|
|
|
"selectProduct": "You must select a product",
|
|
|
|
|
|
"startTime": "You must specify the start date and time",
|
|
|
|
|
|
"duration": "Duration must be greater than 0 minutes",
|
|
|
|
|
|
"quantity": "Quantity must be greater than 0",
|
|
|
|
|
|
"endTime": "End date must be after start date"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stepTitles": {
|
|
|
|
|
|
"productRecipe": "Product & Recipe",
|
|
|
|
|
|
"planning": "Scheduling",
|
|
|
|
|
|
"priorityResources": "Priority & Resources",
|
|
|
|
|
|
"review": "Review & Confirm"
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"unspecified": "Not specified",
|
|
|
|
|
|
"noRecipe": "No specific recipe"
|
|
|
|
|
|
},
|
|
|
|
|
|
"productRecipe": {
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"productLabel": "Product to Produce *",
|
|
|
|
|
|
"batchNumberAutoPlaceholder": "Will be auto-generated if left empty"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipmentStaff": {
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"equipmentExample": "E.g., oven-1, mixer-2",
|
|
|
|
|
|
"staffHelp": "Separate names with commas (E.g., John Doe, Jane Smith)",
|
|
|
|
|
|
"orderId": "Associated order ID",
|
|
|
|
|
|
"forecastId": "Associated forecast ID"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"additionalDetails": {
|
|
|
|
|
|
"advancedOptions": {
|
|
|
|
|
|
"title": "Advanced Options",
|
|
|
|
|
|
"description": "Additional production information"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-12-30 20:51:03 +01:00
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Add Equipment",
|
|
|
|
|
|
"equipmentDetails": "Equipment Details",
|
|
|
|
|
|
"subtitle": "Bakery Equipment",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"name": "Equipment Name",
|
|
|
|
|
|
"namePlaceholder": "E.g., Main Production Oven",
|
|
|
|
|
|
"type": "Equipment Type",
|
|
|
|
|
|
"model": "Model",
|
|
|
|
|
|
"modelPlaceholder": "E.g., Rational SCC 101",
|
|
|
|
|
|
"location": "Location",
|
|
|
|
|
|
"locationPlaceholder": "E.g., Main kitchen",
|
|
|
|
|
|
"status": "Status",
|
|
|
|
|
|
"installDate": "Install Date"
|
|
|
|
|
|
},
|
|
|
|
|
|
"types": {
|
|
|
|
|
|
"oven": "Oven",
|
|
|
|
|
|
"mixer": "Mixer",
|
|
|
|
|
|
"proofer": "Proofer",
|
|
|
|
|
|
"freezer": "Freezer",
|
|
|
|
|
|
"packaging": "Packaging",
|
|
|
|
|
|
"other": "Other"
|
|
|
|
|
|
},
|
|
|
|
|
|
"steps": {
|
|
|
|
|
|
"equipmentDetails": "Equipment Details",
|
|
|
|
|
|
"equipmentDetailsDescription": "Type, model, location"
|
|
|
|
|
|
},
|
|
|
|
|
|
"messages": {
|
|
|
|
|
|
"errorGettingTenant": "Could not get tenant information",
|
|
|
|
|
|
"noBrand": "No brand",
|
|
|
|
|
|
"successCreate": "Equipment created successfully",
|
|
|
|
|
|
"errorCreate": "Error creating equipment"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-12-25 20:51:03 +01:00
|
|
|
|
"purchaseOrder": {
|
|
|
|
|
|
"orderItems": {
|
|
|
|
|
|
"titleHeader": "Products to Purchase",
|
|
|
|
|
|
"addProduct": "Add Product",
|
|
|
|
|
|
"clickToBeginProduct": "Click 'Add Product' to get started",
|
|
|
|
|
|
"units": {
|
|
|
|
|
|
"kg": "Kilograms",
|
|
|
|
|
|
"g": "Grams",
|
|
|
|
|
|
"l": "Liters",
|
|
|
|
|
|
"ml": "Milliliters",
|
|
|
|
|
|
"units": "Units",
|
|
|
|
|
|
"boxes": "Boxes",
|
|
|
|
|
|
"bags": "Bags"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"deliveryDetails": {
|
|
|
|
|
|
"titleHeader": "Order Details",
|
|
|
|
|
|
"subtitleHeader": "Configure delivery date and priority",
|
|
|
|
|
|
"fields": {
|
|
|
|
|
|
"instructionsPlaceholder": "Special instructions for the supplier..."
|
|
|
|
|
|
},
|
|
|
|
|
|
"priorities": {
|
|
|
|
|
|
"critical": "Critical"
|
|
|
|
|
|
},
|
|
|
|
|
|
"advancedOptions": {
|
|
|
|
|
|
"title": "Advanced Options",
|
|
|
|
|
|
"description": "Additional financial information"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"validation": {
|
|
|
|
|
|
"selectSupplier": "You must select a supplier",
|
|
|
|
|
|
"addProduct": "You must add at least one product",
|
|
|
|
|
|
"invalidItems": "All products must have ingredient, quantity greater than 0 and price greater than 0",
|
|
|
|
|
|
"deliveryDate": "You must specify a delivery date"
|
|
|
|
|
|
},
|
|
|
|
|
|
"stepTitles": {
|
|
|
|
|
|
"selectSupplier": "Select Supplier",
|
|
|
|
|
|
"addProducts": "Add Products",
|
|
|
|
|
|
"orderDetails": "Order Details",
|
|
|
|
|
|
"reviewConfirm": "Review & Confirm"
|
|
|
|
|
|
},
|
|
|
|
|
|
"review": {
|
|
|
|
|
|
"unspecified": "Not specified",
|
|
|
|
|
|
"noName": "Product without name"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"itemTypeSelector": {
|
2025-12-28 22:29:27 +01:00
|
|
|
|
"title": "Select Type",
|
|
|
|
|
|
"description": "Choose what you want to add",
|
|
|
|
|
|
"search": {
|
|
|
|
|
|
"placeholder": "Search by name or category...",
|
|
|
|
|
|
"noResults": "No results found",
|
|
|
|
|
|
"resultSingular": "result",
|
|
|
|
|
|
"resultPlural": "results"
|
|
|
|
|
|
},
|
2025-12-25 20:51:03 +01:00
|
|
|
|
"categories": {
|
|
|
|
|
|
"all": "All",
|
|
|
|
|
|
"daily": "Daily",
|
|
|
|
|
|
"common": "Common",
|
|
|
|
|
|
"setup": "Setup"
|
|
|
|
|
|
},
|
|
|
|
|
|
"badges": {
|
|
|
|
|
|
"mostCommon": "⭐ Most Common",
|
|
|
|
|
|
"daily": "Daily",
|
|
|
|
|
|
"common": "Common",
|
|
|
|
|
|
"setup": "Setup"
|
2025-12-28 22:29:27 +01:00
|
|
|
|
},
|
|
|
|
|
|
"items": {
|
|
|
|
|
|
"inventory": {
|
|
|
|
|
|
"title": "Inventory",
|
|
|
|
|
|
"subtitle": "Add ingredients or products to your inventory",
|
|
|
|
|
|
"keywords": ["stock", "ingredients", "products", "warehouse"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"supplier": {
|
|
|
|
|
|
"title": "Supplier",
|
|
|
|
|
|
"subtitle": "Add a new supplier or vendor",
|
|
|
|
|
|
"keywords": ["vendor", "purchases", "supplies"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"recipe": {
|
|
|
|
|
|
"title": "Recipe",
|
|
|
|
|
|
"subtitle": "Create a new recipe or formula",
|
|
|
|
|
|
"keywords": ["formula", "preparation", "ingredients"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"equipment": {
|
|
|
|
|
|
"title": "Equipment",
|
|
|
|
|
|
"subtitle": "Register bakery equipment or machinery",
|
|
|
|
|
|
"keywords": ["oven", "mixer", "equipment", "machine"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"quality-template": {
|
|
|
|
|
|
"title": "Quality Template",
|
|
|
|
|
|
"subtitle": "Create a quality control template",
|
|
|
|
|
|
"keywords": ["control", "quality", "inspection", "verification"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer-order": {
|
|
|
|
|
|
"title": "Customer Order",
|
|
|
|
|
|
"subtitle": "Create a new customer order",
|
|
|
|
|
|
"keywords": ["order", "customer", "sale"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"customer": {
|
|
|
|
|
|
"title": "Customer",
|
|
|
|
|
|
"subtitle": "Add a new customer",
|
|
|
|
|
|
"keywords": ["customer", "buyer", "contact"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"team-member": {
|
|
|
|
|
|
"title": "Team Member",
|
|
|
|
|
|
"subtitle": "Add a team member or employee",
|
|
|
|
|
|
"keywords": ["employee", "worker", "staff"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"sales-entry": {
|
|
|
|
|
|
"title": "Sales Entry",
|
|
|
|
|
|
"subtitle": "Record a sales transaction",
|
|
|
|
|
|
"keywords": ["sale", "cash", "revenue", "transaction"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"purchase-order": {
|
|
|
|
|
|
"title": "Purchase Order",
|
|
|
|
|
|
"subtitle": "Create a purchase order to supplier",
|
|
|
|
|
|
"keywords": ["purchase", "order", "supplier"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"production-batch": {
|
|
|
|
|
|
"title": "Production Batch",
|
|
|
|
|
|
"subtitle": "Create a new production batch",
|
|
|
|
|
|
"keywords": ["production", "batch", "manufacturing"]
|
|
|
|
|
|
}
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|