/** * i18n.js — Simple internationalization for Nexus Autoparts POS * Supports: es (Spanish/Mexico) and en (English/USA) */ var I18N = { es: { // Sidebar nav 'dashboard': 'Dashboard', 'pos': 'Punto de Venta', 'catalog': 'Catalogo', 'inventory': 'Inventario', 'diagrams': 'Diagramas', 'customers': 'Clientes', 'invoicing': 'Facturacion', 'accounting': 'Contabilidad', 'reports': 'Reportes', 'fleet': 'Flotillas', 'whatsapp': 'WhatsApp', 'config': 'Configuracion', // Sidebar sections 'nav_main': 'Principal', 'nav_management': 'Gestion', 'nav_system': 'Sistema', // Common actions 'search': 'Buscar', 'save': 'Guardar', 'cancel': 'Cancelar', 'delete': 'Eliminar', 'edit': 'Editar', 'new': 'Nuevo', 'close': 'Cerrar', 'confirm': 'Confirmar', 'back': 'Regresar', 'next': 'Siguiente', 'print': 'Imprimir', 'export': 'Exportar', 'import': 'Importar', 'refresh': 'Actualizar', 'loading': 'Cargando...', 'no_results': 'Sin resultados', 'error': 'Error', 'success': 'Exito', 'warning': 'Advertencia', // Financial 'total': 'Total', 'subtotal': 'Subtotal', 'tax': 'IVA', 'price': 'Precio', 'unit_price': 'Precio Unitario', 'cost': 'Costo', 'discount': 'Descuento', 'margin': 'Margen', 'profit': 'Utilidad', 'balance': 'Saldo', 'amount': 'Monto', // Inventory 'quantity': 'Cantidad', 'stock': 'Existencias', 'min_stock': 'Minimo', 'max_stock': 'Maximo', 'sku': 'SKU', 'barcode': 'Codigo de Barras', 'brand': 'Marca', 'category': 'Categoria', 'description': 'Descripcion', 'location': 'Ubicacion', // Table headers 'name': 'Nombre', 'date': 'Fecha', 'status': 'Estado', 'actions': 'Acciones', 'id': 'ID', 'type': 'Tipo', 'notes': 'Notas', // POS 'charge': 'Cobrar', 'quote': 'Cotizacion', 'layaway': 'Apartado', 'credit': 'Credito', 'cash': 'Efectivo', 'transfer': 'Transferencia', 'card': 'Tarjeta', 'mixed': 'Mixto', 'change': 'Cambio', 'customer': 'Cliente', 'general_public': 'Publico General', 'sale': 'Venta', 'sales': 'Ventas', 'ticket': 'Ticket', 'receipt': 'Recibo', 'payment': 'Pago', 'payment_method': 'Metodo de Pago', 'add_to_cart': 'Agregar', 'clear_cart': 'Limpiar Carrito', 'hold_sale': 'Pausar Venta', 'recall_sale': 'Retomar Venta', 'cancel_sale': 'Cancelar Venta', 'confirm_payment': 'Confirmar Pago', 'cash_received': 'Efectivo Recibido', 'amount_due': 'Total a Pagar', 'remaining': 'Faltante', // Customers 'phone': 'Telefono', 'email': 'Correo', 'address': 'Direccion', 'rfc': 'RFC', 'credit_limit': 'Limite de Credito', 'credit_balance': 'Saldo de Credito', 'price_tier': 'Nivel de Precio', // Invoicing 'invoice': 'Factura', 'cfdi': 'CFDI', 'stamp': 'Timbrar', 'cancel_invoice': 'Cancelar Factura', // Config 'appearance': 'Apariencia', 'business_data': 'Datos de la Empresa', 'employees': 'Empleados', 'printers': 'Impresoras', 'branches': 'Sucursales', 'fiscal_params': 'Parametros Fiscales', 'system_prefs': 'Preferencias del Sistema', 'currency_config': 'Moneda', 'language': 'Idioma', 'theme': 'Tema', 'dark_theme': 'Tema oscuro', 'light_theme': 'Tema claro', 'logout': 'Cerrar sesion', // Currency 'currency': 'Moneda', 'exchange_rate': 'Tipo de Cambio', 'default_currency': 'Moneda Predeterminada', 'mxn': 'Peso Mexicano', 'usd': 'Dolar Estadounidense', // Roles 'role_owner': 'Dueno', 'role_admin': 'Administrador', 'role_cashier': 'Cajero', 'role_warehouse': 'Almacen', 'role_accountant': 'Contador', // Reports 'daily_sales': 'Ventas del Dia', 'weekly_sales': 'Ventas de la Semana', 'monthly_sales': 'Ventas del Mes', 'top_products': 'Productos Mas Vendidos', 'low_stock': 'Bajo Stock', // Fleet 'vehicle': 'Vehiculo', 'plate': 'Placa', 'vin': 'VIN', 'mileage': 'Kilometraje', // Misc 'yes': 'Si', 'no': 'No', 'all': 'Todos', 'active': 'Activo', 'inactive': 'Inactivo', 'pending': 'Pendiente', 'completed': 'Completado', 'cancelled': 'Cancelado', }, en: { // Sidebar nav 'dashboard': 'Dashboard', 'pos': 'Point of Sale', 'catalog': 'Catalog', 'inventory': 'Inventory', 'diagrams': 'Diagrams', 'customers': 'Customers', 'invoicing': 'Invoicing', 'accounting': 'Accounting', 'reports': 'Reports', 'fleet': 'Fleet', 'whatsapp': 'WhatsApp', 'config': 'Settings', // Sidebar sections 'nav_main': 'Main', 'nav_management': 'Management', 'nav_system': 'System', // Common actions 'search': 'Search', 'save': 'Save', 'cancel': 'Cancel', 'delete': 'Delete', 'edit': 'Edit', 'new': 'New', 'close': 'Close', 'confirm': 'Confirm', 'back': 'Back', 'next': 'Next', 'print': 'Print', 'export': 'Export', 'import': 'Import', 'refresh': 'Refresh', 'loading': 'Loading...', 'no_results': 'No results', 'error': 'Error', 'success': 'Success', 'warning': 'Warning', // Financial 'total': 'Total', 'subtotal': 'Subtotal', 'tax': 'Tax', 'price': 'Price', 'unit_price': 'Unit Price', 'cost': 'Cost', 'discount': 'Discount', 'margin': 'Margin', 'profit': 'Profit', 'balance': 'Balance', 'amount': 'Amount', // Inventory 'quantity': 'Quantity', 'stock': 'Stock', 'min_stock': 'Minimum', 'max_stock': 'Maximum', 'sku': 'SKU', 'barcode': 'Barcode', 'brand': 'Brand', 'category': 'Category', 'description': 'Description', 'location': 'Location', // Table headers 'name': 'Name', 'date': 'Date', 'status': 'Status', 'actions': 'Actions', 'id': 'ID', 'type': 'Type', 'notes': 'Notes', // POS 'charge': 'Charge', 'quote': 'Quote', 'layaway': 'Layaway', 'credit': 'Credit', 'cash': 'Cash', 'transfer': 'Transfer', 'card': 'Card', 'mixed': 'Mixed', 'change': 'Change', 'customer': 'Customer', 'general_public': 'Walk-in Customer', 'sale': 'Sale', 'sales': 'Sales', 'ticket': 'Ticket', 'receipt': 'Receipt', 'payment': 'Payment', 'payment_method': 'Payment Method', 'add_to_cart': 'Add', 'clear_cart': 'Clear Cart', 'hold_sale': 'Hold Sale', 'recall_sale': 'Recall Sale', 'cancel_sale': 'Cancel Sale', 'confirm_payment': 'Confirm Payment', 'cash_received': 'Cash Received', 'amount_due': 'Amount Due', 'remaining': 'Remaining', // Customers 'phone': 'Phone', 'email': 'Email', 'address': 'Address', 'rfc': 'Tax ID (RFC)', 'credit_limit': 'Credit Limit', 'credit_balance': 'Credit Balance', 'price_tier': 'Price Tier', // Invoicing 'invoice': 'Invoice', 'cfdi': 'CFDI', 'stamp': 'Stamp', 'cancel_invoice': 'Cancel Invoice', // Config 'appearance': 'Appearance', 'business_data': 'Business Info', 'employees': 'Employees', 'printers': 'Printers', 'branches': 'Branches', 'fiscal_params': 'Tax Settings', 'system_prefs': 'System Preferences', 'currency_config': 'Currency', 'language': 'Language', 'theme': 'Theme', 'dark_theme': 'Dark theme', 'light_theme': 'Light theme', 'logout': 'Log out', // Currency 'currency': 'Currency', 'exchange_rate': 'Exchange Rate', 'default_currency': 'Default Currency', 'mxn': 'Mexican Peso', 'usd': 'US Dollar', // Roles 'role_owner': 'Owner', 'role_admin': 'Administrator', 'role_cashier': 'Cashier', 'role_warehouse': 'Warehouse', 'role_accountant': 'Accountant', // Reports 'daily_sales': 'Daily Sales', 'weekly_sales': 'Weekly Sales', 'monthly_sales': 'Monthly Sales', 'top_products': 'Top Products', 'low_stock': 'Low Stock', // Fleet 'vehicle': 'Vehicle', 'plate': 'Plate', 'vin': 'VIN', 'mileage': 'Mileage', // Misc 'yes': 'Yes', 'no': 'No', 'all': 'All', 'active': 'Active', 'inactive': 'Inactive', 'pending': 'Pending', 'completed': 'Completed', 'cancelled': 'Cancelled', } }; var currentLang = localStorage.getItem('pos_lang') || 'es'; /** * Translate a key to the current language. * Falls back to Spanish, then to the raw key. */ window.t = function(key) { return (I18N[currentLang] && I18N[currentLang][key]) || (I18N['es'] && I18N['es'][key]) || key; }; /** * Switch the UI language and reload. */ window.setLang = function(lang) { currentLang = lang; localStorage.setItem('pos_lang', lang); location.reload(); }; /** * Get the current language code. */ window.getLang = function() { return currentLang; };