Support multiple languages

This commit is contained in:
Urtzi Alfaro
2025-09-25 12:14:46 +02:00
parent 6d4090f825
commit f02a980c87
66 changed files with 3274 additions and 333 deletions

View File

@@ -1,4 +1,5 @@
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Plus, Package, Calculator, Settings } from 'lucide-react';
import { StatusModal } from '../../ui/StatusModal/StatusModal';
import { IngredientCreate, UnitOfMeasure, IngredientCategory, ProductCategory } from '../../../api/types/inventory';
@@ -20,6 +21,7 @@ export const CreateIngredientModal: React.FC<CreateIngredientModalProps> = ({
onClose,
onCreateIngredient
}) => {
const { t } = useTranslation(['inventory']);
const [formData, setFormData] = useState<IngredientCreate>({
name: '',
description: '',
@@ -70,32 +72,32 @@ export const CreateIngredientModal: React.FC<CreateIngredientModalProps> = ({
const handleSave = async () => {
// Validation
if (!formData.name?.trim()) {
alert('El nombre es requerido');
alert(t('inventory:validation.name_required', 'El nombre es requerido'));
return;
}
if (!formData.category) {
alert('La categoría es requerida');
alert(t('inventory:validation.category_required', 'La categoría es requerida'));
return;
}
if (!formData.unit_of_measure) {
alert('La unidad de medida es requerida');
alert(t('inventory:validation.unit_required', 'La unidad de medida es requerida'));
return;
}
if (!formData.low_stock_threshold || formData.low_stock_threshold < 0) {
alert('El umbral de stock bajo debe ser un número positivo');
alert(t('inventory:validation.min_greater_than_zero', 'El umbral de stock bajo debe ser un número positivo'));
return;
}
if (!formData.reorder_point || formData.reorder_point < 0) {
alert('El punto de reorden debe ser un número positivo');
alert(t('inventory:validation.min_greater_than_zero', 'El punto de reorden debe ser un número positivo'));
return;
}
if (formData.reorder_point <= formData.low_stock_threshold) {
alert('El punto de reorden debe ser mayor que el umbral de stock bajo');
alert(t('inventory:validation.max_greater_than_min', 'El punto de reorden debe ser mayor que el umbral de stock bajo'));
return;
}
@@ -153,7 +155,7 @@ export const CreateIngredientModal: React.FC<CreateIngredientModalProps> = ({
const statusConfig = {
color: statusColors.inProgress.primary,
text: 'Nuevo Artículo',
text: t('inventory:actions.add_item', 'Nuevo Artículo'),
icon: Plus,
isCritical: false,
isHighlight: true
@@ -161,11 +163,11 @@ export const CreateIngredientModal: React.FC<CreateIngredientModalProps> = ({
const sections = [
{
title: 'Información Básica',
title: t('inventory:forms.item_details', 'Información Básica'),
icon: Package,
fields: [
{
label: 'Nombre',
label: t('inventory:fields.name', 'Nombre'),
value: formData.name,
type: 'text' as const,
editable: true,
@@ -173,7 +175,7 @@ export const CreateIngredientModal: React.FC<CreateIngredientModalProps> = ({
placeholder: 'Ej: Harina de trigo 000'
},
{
label: 'Descripción',
label: t('inventory:fields.description', 'Descripción'),
value: formData.description || '',
type: 'text' as const,
editable: true,