From 14d483780f302be7d098e4e92cc63726e3794730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Paulina=20Ram=C3=ADrez=20V=C3=A1squez?= Date: Sun, 2 Aug 2020 19:08:14 -0500 Subject: [PATCH 01/19] Add admin spanish language --- packages/Webkul/Admin/src/Resources/lang/es/app.php | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/Webkul/Admin/src/Resources/lang/es/app.php diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -0,0 +1 @@ + From 1491c62cc2582632b2eab1414283a48179a65cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Paulina=20Ram=C3=ADrez=20V=C3=A1squez?= Date: Sun, 2 Aug 2020 19:11:40 -0500 Subject: [PATCH 02/19] Updating file with new translations This translation is based on Colombian Spanish, however it is valid for most Spanish-speaking countries. --- .../Admin/src/Resources/lang/es/app.php | 1314 +++++++++++++++++ 1 file changed, 1314 insertions(+) diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php index 8b1378917..c5fe20cb8 100644 --- a/packages/Webkul/Admin/src/Resources/lang/es/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -1 +1,1315 @@ + 'Guardar', + 'create' => 'Crear', + 'update' => 'Actualizar', + 'delete' => 'Borrar', + 'failed' => 'Falló', + 'store' => 'Almacén', + 'image' => 'Imagen', + 'no result' => 'Sin resultados', + 'product' => 'Producto', + 'attribute' => 'Atributo', + 'actions' => 'Acciones', + 'id' => 'ID', + 'action' => 'acción', + 'yes' => 'Sí', + 'no' => 'No', + 'true' => 'Verdadero', + 'false' => 'Falso', + 'apply' => 'Aplicar', + 'action' => 'Acción', + 'label' => 'Etiqueta', + 'name' => 'Nombre', + 'title' => 'Título', + 'code' => 'Código', + 'type' => 'Tipo', + 'required' => 'Requerido', + 'unique' => 'Único', + 'locale-based' => 'Basado en lugar', + 'channel-based' => 'Basado en canal', + 'status' => 'Estado', + 'select-option' => 'Seleccione opción', + 'category' => 'Categoría', + + 'common' => [ + 'no-result-found' => 'No se encontraron registros.', + 'country' => 'País', + 'state' => 'Departamento', + 'true' => 'Verdadero', + 'false' => 'Falso' + ], + + 'layouts' => [ + 'my-account' => 'Mi cuenta', + 'logout' => 'Desconectar', + 'visit-shop' => 'Visitar tienda', + 'dashboard' => 'Tablero', + 'sales' => 'Ventas', + 'orders' => 'Pedidos', + 'shipments' => 'Envíos', + 'invoices' => 'Facturas', + 'refunds' => 'Reembolsos', + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'categories' => 'Categorías', + 'attributes' => 'Atributos', + 'attribute-families' => 'Familias de atributos', + 'customers' => 'Clientes', + 'groups' => 'Grupos', + 'reviews' => 'Opiniones', + 'newsletter-subscriptions' => 'Suscripciones a newsletter por correo', + 'configure' => 'Configurar', + 'settings' => 'Ajustes', + 'locales' => 'Lugares', + 'currencies' => 'Monedas', + 'exchange-rates' => 'Tasas de cambio', + 'inventory-sources' => 'Fuentes de inventario', + 'channels' => 'Canales', + 'users' => 'Usuarios', + 'roles' => 'Roles', + 'sliders' => 'Sliders', + 'taxes' => 'Impuestos', + 'tax-categories' => 'Categorías de impuestos', + 'tax-rates' => 'Tasas de impuestos', + 'promotions' => 'Promociones', + 'discount' => 'Descuento', + 'cms' => 'CMS' + ], + + 'acl' => [ + 'dashboard' => 'Tablero', + 'sales' => 'Ventas', + 'orders' => 'Pedidos', + 'shipments' => 'Envíos', + 'invoices' => 'Facturas', + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'categories' => 'Categorías', + 'attributes' => 'Atributos', + 'attribute-families' => 'Familias de atributos', + 'customers' => 'Clientes', + 'groups' => 'Grupos', + 'reviews' => 'Opiniones', + 'newsletter-subscriptions' => 'Suscripciones a newsletter por correo', + 'configure' => 'Configurar', + 'settings' => 'Ajustes', + 'locales' => 'Lugares', + 'currencies' => 'Monedas', + 'exchange-rates' => 'Tasas de cambio', + 'inventory-sources' => 'Fuentes de inventario', + 'channels' => 'Canales', + 'users' => 'Usuarios', + 'roles' => 'Roles', + 'sliders' => 'Sliders', + 'taxes' => 'Impuestos', + 'tax-categories' => 'Categorías de impuestos', + 'tax-rates' => 'Tasas de impuestos', + 'edit' => 'Editar', + 'create' => 'Agregar', + 'delete' => 'Borrar', + 'promotions' => 'Promociones', + 'cart-rules' => 'Reglas del carrito', + 'catalog-rules' => 'Reglas del catálogo', + ], + + 'dashboard' => [ + 'title' => 'Tablero', + 'from' => 'Desde', + 'to' => 'Hasta', + 'total-customers' => 'Total Clientes', + 'total-orders' => 'Total Pedidos', + 'total-sale' => 'Total Ventas', + 'average-sale' => 'Promedio de pedidos vendidos', + 'increased' => ':progress%', + 'decreased' => ':progress%', + 'sales' => 'Ventas', + 'top-performing-categories' => 'Categorías de mayor rendimiento', + 'product-count' => ':count Productos', + 'top-selling-products' => 'Productos más vendidos', + 'sale-count' => ':count Ventas', + 'customer-with-most-sales' => 'Clientes con más ventas', + 'order-count' => ':count Pedidos', + 'revenue' => 'Ingresos :total', + 'stock-threshold' => 'Umbral de Stock', + 'qty-left' => 'Quedan :qty' + ], + + 'datagrid' => [ + 'mass-ops' => [ + 'method-error' => '¡Error! Se detectó un método erróneo, por favor verifique la configuración de acción masiva', + 'delete-success' => ':resource seleccionados fueron borrados con éxito', + 'partial-action' => 'Algunas acciones no se realizaron debido a restricciones en :resource', + 'update-success' => ':resource seleccionados fueron actualizados con éxito', + 'no-resource' => 'El recurso provisto es insuficiente para la acción' + ], + + 'id' => 'ID', + 'status' => 'Estado', + 'code' => 'Código', + 'admin-name' => 'Nombre', + 'name' => 'Nombre', + 'direction' => 'Dirección', + 'fullname' => 'Nombre completo', + 'type' => 'Tipo', + 'required' => 'Requerido', + 'unique' => 'Único', + 'per-locale' => 'Lugar ubicado', + 'per-channel' => 'Canal ubicado', + 'position' => 'Posición', + 'locale' => 'Lugar', + 'hostname' => 'Hostname', + 'email' => 'Email', + 'group' => 'Grupo', + 'phone' => 'Teléfono', + 'gender' => 'Género', + 'title' => 'Título', + 'layout' => 'Diseño', + 'url-key' => 'URL clave', + 'comment' => 'Comentario', + 'product-name' => 'Producto', + 'currency-name' => 'Nombre de la moneda', + 'exch-rate' => 'Tasa de cambio', + 'priority' => 'Prioridad', + 'subscribed' => 'Suscrito', + 'base-total' => 'Total base', + 'grand-total' => 'Gran total', + 'order-date' => 'Fecha pedido', + 'channel-name' => 'Nombre del canal', + 'billed-to' => 'Facturado a', + 'shipped-to' => 'Enviado a', + 'order-id' => 'Pedido #', + 'invoice-date' => 'Fecha de factura', + 'total-qty' => 'Cantidad total', + 'inventory-source' => 'Fuente de inventario', + 'shipment-date' => 'Fecha de envío', + 'shipment-to' => 'Enviar hacia', + 'sku' => 'SKU', + 'price' => 'Precio', + 'qty' => 'Cantidad', + 'permission-type' => 'Tipo de permiso', + 'identifier' => 'Identificador', + 'state' => 'Departamento', + 'country' => 'País', + 'tax-rate' => 'Tasa', + 'role' => 'Rol', + 'sub-total' => 'Subtotal', + 'no-of-products' => 'Número de productos', + 'attribute-family' => 'Familia de atributos', + 'starts-from' => 'Inicia en', + 'ends-till' => 'Termina en', + 'per-cust' => 'Por cliente', + 'usage-throttle' => 'Tiempos de uso', + 'for-guest' => 'Para invitados', + 'order_number' => 'Pedido #', + 'refund-date' => 'Fecha reembolso', + 'refunded' => 'Reembolsado', + 'start' => 'Inicio', + 'end' => 'Fin', + 'active' => 'Activo', + 'inactive' => 'Inactivo', + 'true' => 'Verdadero', + 'false' => 'Falso', + 'approved' => 'Aprobado', + 'pending' => 'Pendiente', + 'disapproved' => 'Rechazado', + 'coupon-code' => 'Código de cupón', + 'times-used' => 'Times Used', + 'created-date' => 'Creado en', + 'expiration-date' => 'Fecha expiración', + 'edit' => 'Editar', + 'delete' => 'Borrar', + 'view' => 'Ver', + 'rtl' => 'RTL', + 'ltr' => 'LTR', + 'update-status' => 'Actualizar Estado' + ], + + 'account' => [ + 'title' => 'Mi cuenta', + 'save-btn-title' => 'Guardar', + 'general' => 'General', + 'name' => 'Nombre', + 'email' => 'Email', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'change-password' => 'Cambiar contraseña de cuenta', + 'current-password' => 'Contraseña actual' + ], + + 'users' => [ + 'forget-password' => [ + 'title' => '¿Olvidó su contraseña?', + 'header-title' => 'Recuperar contraseña', + 'email' => 'Email registrado', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'back-link-title' => 'Regresar al login', + 'submit-btn-title' => 'Enviar correo de restablecimiento de contraseña' + ], + + 'reset-password' => [ + 'title' => 'restablecer contraseña', + 'email' => 'Email registrado', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'back-link-title' => 'Regresar al login', + 'submit-btn-title' => 'restablecer contraseña' + ], + + 'roles' => [ + 'title' => 'Roles', + 'add-role-title' => 'Agregar Rol', + 'edit-role-title' => 'Editar Rol', + 'save-btn-title' => 'Guardar Rol', + 'general' => 'General', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'access-control' => 'Control de acceso', + 'permissions' => 'Permisos', + 'custom' => 'Personalizado', + 'all' => 'Todos' + ], + + 'users' => [ + 'title' => 'Usuario', + 'add-user-title' => 'Agregar Usuario', + 'edit-user-title' => 'Editar Usuario', + 'save-btn-title' => 'Guardar Usuario', + 'general' => 'General', + 'email' => 'Email', + 'name' => 'Nombre', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'status-and-role' => 'Estado y rol', + 'role' => 'Rol', + 'status' => 'Estado', + 'account-is-active' => 'La cuenta está activa', + 'current-password' => 'Ingrese la contraseña actual', + 'confirm-delete' => '¿Confirma que desea borrar esta cuenta?', + 'confirm-delete-title' => 'Confirmar contraseña antes de borrar', + 'delete-last' => 'Al menos un admin es requerido.', + 'delete-success' => '¡Éxito! Usuario borrado', + 'incorrect-password' => 'La contraseña que ingresó es incorrecta', + 'password-match' => 'La contraseña actual no coincide.', + 'account-save' => 'Los cambios en la cuenta fueron guardados con éxito.', + 'login-error' => 'Por favor verifique sus credenciales e intente nuevamente.', + 'activate-warning' => 'Su cuenta aún no ha sido activada, por favor contacte al administrador.' + ], + + 'sessions' => [ + 'title' => 'Acceder', + 'email' => 'Email', + 'password' => 'Contraseña', + 'forget-password-link-title' => '¿Olvidó su contraseña?', + 'remember-me' => 'Recordar esta sesión', + 'submit-btn-title' => 'Acceder' + ] + ], + + 'sales' => [ + 'orders' => [ + 'title' => 'Pedidos', + 'view-title' => 'Pedido #:order_id', + 'cancel-btn-title' => 'Cancelar', + 'shipment-btn-title' => 'Envío', + 'invoice-btn-title' => 'Factura', + 'info' => 'Información', + 'invoices' => 'Facturas', + 'shipments' => 'Envíos', + 'order-and-account' => 'Pedido y cuenta', + 'order-info' => 'Información del pedido', + 'order-date' => 'Fecha pedido', + 'order-status' => 'Estado del pedido', + 'order-status-canceled' => 'Cancelado', + 'order-status-closed' => 'Cerrado', + 'order-status-fraud' => 'Fraude', + 'order-status-pending' => 'Pendiente', + 'order-status-pending-payment' => 'Pendiente de pago', + 'order-status-processing' => 'Procesando', + 'order-status-success' => 'Completado', + 'channel' => 'Canal', + 'customer-name' => 'Nombre del cliente', + 'email' => 'Email', + 'contact-number' => 'Número de contacto', + 'account-info' => 'Información de la cuenta', + 'address' => 'Dirección', + 'shipping-address' => 'Dirección de envío', + 'billing-address' => 'Dirección de facturación', + 'payment-and-shipping' => 'Pago y envío', + 'payment-info' => 'Payment Información', + 'payment-method' => 'Método de pago', + 'currency' => 'Moneda', + 'shipping-info' => 'Información de envío', + 'shipping-method' => 'Método de envío', + 'shipping-price' => 'Precio de envío', + 'products-ordered' => 'Productos pedidos', + 'SKU' => 'SKU', + 'product-name' => 'Nombre del producto', + 'qty' => 'Cant', + 'artículo-status' => 'Estado del articulo', + 'artículo-ordered' => 'Pedido (:qty_ordered)', + 'artículo-invoice' => 'Facturado (:qty_invoiced)', + 'artículo-shipped' => 'Enviado (:qty_shipped)', + 'artículo-canceled' => 'Cancelado (:qty_canceled)', + 'artículo-refunded' => 'Reembolsado (:qty_refunded)', + 'price' => 'Precio', + 'total' => 'Total', + 'subtotal' => 'Subtotal', + 'shipping-handling' => 'Envío y manejo', + 'discount' => 'Descuento', + 'tax' => 'Impuesto', + 'tax-percent' => 'Porcentaje impuesto', + 'tax-amount' => 'Monto impuesto', + 'discount-amount' => 'Monto descuento', + 'discount-amount' => 'Monto descuento', + 'grand-total' => 'Gran total', + 'total-paid' => 'Total Pagado', + 'total-refunded' => 'Total reembolsado', + 'total-due' => 'Total adeudado', + 'cancel-confirm-msg' => '¿Está seguro que desea cancelar este pedido?', + 'refund-btn-title' => 'El monto del reembolso no debe ser cero', + 'refunds' => 'Reembolsos' + ], + + 'invoices' => [ + 'title' => 'Facturas', + 'id' => 'Id', + 'invoice-id' => 'Factura #', + 'date' => 'Fecha de factura', + 'order-id' => 'Pedido #', + 'customer-name' => 'Nombre del cliente', + 'status' => 'Estado', + 'amount' => 'Monto', + 'action' => 'Acción', + 'add-title' => 'Crear factura', + 'save-btn-title' => 'Guardar factura', + 'qty' => 'Cant', + 'qty-ordered' => 'Cant pedido', + 'qty-to-invoice' => 'Cant a facturar', + 'view-title' => 'Factura #:invoice_id', + 'bill-to' => 'Facturar a', + 'ship-to' => 'Enviar a', + 'print' => 'Imprimir', + 'order-date' => 'Fecha del pedido', + 'creation-error' => 'La creaciónd e facturas al pedido no está permitida.', + 'product-error' => 'La factura no puede ser creada sin productos.' + ], + + 'shipments' => [ + 'title' => 'Envíos', + 'id' => 'Id', + 'date' => 'Fecha de envío', + 'order-id' => 'Pedido #', + 'order-date' => 'Fecha del pedido', + 'customer-name' => 'Nombre del cliente', + 'total-qty' => 'Cantidad total', + 'action' => 'Acción', + 'add-title' => 'Crear envío', + 'save-btn-title' => 'Guardar envío', + 'qty-ordered' => 'Cant pedido', + 'qty-invoiced' => 'Cant facturada', + 'qty-to-ship' => 'Cant a enviar', + 'available-sources' => 'Fuentes disponibles', + 'source' => 'Fuente', + 'select-source' => 'Por favor seleccione la bodega', + 'qty-available' => 'Cant disponible', + 'inventory-source' => 'Fuente de inventario', + 'carrier-title' => 'Nombre transportista', + 'tracking-number' => 'Número de tracking', + 'view-title' => 'Envío #:shipment_id', + 'creation-error' => 'El envío no puede ser creado para este pedido.', + 'order-error' => 'La creación de envíos no está permitido.', + 'quantity-invalid' => 'La cantidad pedida es inválida o no está disponible.', + ], + + 'refunds' => [ + 'title' => 'Reembolsos', + 'id' => 'Id', + 'add-title' => 'Crear reembolso', + 'save-btn-title' => 'El monto del reembolso no debe ser cero', + 'order-id' => 'Pedido #', + 'qty-ordered' => 'Cant pedido', + 'qty-to-refund' => 'Cant a reembolsar', + 'refund-shipping' => 'Envío a reembolsar', + 'adjustment-refund' => 'Ajuste reembolso', + 'adjustment-fee' => 'Tarifa de ajuste', + 'update-qty' => 'Actualizar cantidades', + 'invalid-qty' => 'Se encontró una cantidad de articulos a reembolsar inválida.', + 'refund-limit-error' => 'El máximo disponible para reembolsar es :amount.', + 'refunded' => 'Reembolsado', + 'date' => 'Fecha reembolso', + 'customer-name' => 'Nombre del cliente', + 'status' => 'Estado', + 'action' => 'Acción', + 'view-title' => 'Reembolso #:refund_id', + 'invalid-refund-amount-error' => 'El monto del reembolso no debe ser cero.' + + ] + ], + + 'catalog' => [ + 'products' => [ + 'title' => 'Productos', + 'add-product-btn-title' => 'Agregar producto', + 'add-title' => 'Agregar producto', + 'edit-title' => 'Editar producto', + 'save-btn-title' => 'Guardar producto', + 'general' => 'General', + 'product-type' => 'Tipo de producto', + 'simple' => 'Simple', + 'configurable' => 'Configurable', + 'familiy' => 'Familia de atributos', + 'sku' => 'SKU', + 'configurable-attributes' => 'Atributos configurables', + 'attribute-header' => 'Atributo(s)', + 'attribute-option-header' => 'Opcion(es) de atributo', + 'no' => 'No', + 'yes' => 'Sí', + 'disabled' => 'Deshabilitado', + 'enabled' => 'Habilitado', + 'add-variant-btn-title' => 'Agregar variante', + 'name' => 'Nombre', + 'qty' => 'Cant', + 'price' => 'Precio', + 'weight' => 'Peso', + 'status' => 'Estado', + 'enabled' => 'Habilitado', + 'disabled' => 'Deshabilitado', + 'add-variant-title' => 'Agregar variante', + 'variant-already-exist-message' => 'Una variante con las mismas opciones de atributos ya existe.', + 'add-image-btn-title' => 'Agregar imagen', + 'mass-delete-success' => 'Todos los productos seleccionados han sido borrados con éxito', + 'mass-update-success' => 'Todos los productos seleccionados han sido actualizados con éxito', + 'configurable-error' => 'Por favor seleccione al menos un atributo configurable.', + 'categories' => 'Categorías', + 'images' => 'Imágenes', + 'inventories' => 'Inventarios', + 'variations' => 'Variaciones', + 'downloadable' => 'Información descargable', + 'links' => 'Links', + 'add-link-btn-title' => 'Agregar link', + 'samples' => 'Muestras', + 'add-sample-btn-title' => 'Agregar muestra', + 'downloads' => 'Descarga permitida', + 'file' => 'Archivo', + 'sample' => 'Muestra', + 'upload-file' => 'Subir archivo', + 'url' => 'Url', + 'sort-order' => 'Orden de clasificación', + 'browse-file' => 'Buscar archivo', + 'product-link' => 'Productos enlazados', + 'cross-selling' => 'Venta cruzada', + 'up-selling' => 'Up Selling', + 'related-products' => 'Productos relacionados', + 'product-search-hint' => 'Inicie escribiendo un nombre de producto', + 'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.', + 'searching' => 'Buscaring ...', + 'grouped-products' => 'Grouped Productos', + 'search-products' => 'Buscar Productos', + 'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.', + 'channel' => 'Canales', + 'bundle-item' => 'Paquete de artículos', + 'add-option-btn-title' => 'Agregar opción', + 'option-title' => 'Título de opción', + 'input-type' => 'Tipo de opción', + 'is-required' => 'Es requerido', + 'select' => 'Lista de selección', + 'radio' => 'Opción única', + 'checkbox' => 'Opción múltiple', + 'multiselect' => 'Lista de selección múltiple', + 'new-option' => 'Nueva opción', + 'is-default' => 'Es predeterminada' + ], + + 'attributes' => [ + 'title' => 'Atributos', + 'add-title' => 'Agregar atributo', + 'edit-title' => 'Editar atributo', + 'save-btn-title' => 'Guardar atributo', + 'general' => 'General', + 'code' => 'Código atributo', + 'type' => 'Tipo de atributo', + 'text' => 'Texto', + 'textarea' => 'Área de texto', + 'price' => 'Precio', + 'boolean' => 'Booleano', + 'select' => 'Lista de selección', + 'multiselect' => 'Lista de selección múltiple', + 'datetime' => 'Fecha y hora', + 'date' => 'Fecha', + 'label' => 'Etiqueta', + 'admin' => 'Admin', + 'options' => 'Opciones', + 'position' => 'Posición', + 'add-option-btn-title' => 'Agregar opción', + 'validations' => 'Validaciones', + 'input_validation' => 'Validación entrada', + 'is_required' => 'Es requerido', + 'is_unique' => 'Es único', + 'number' => 'Número', + 'decimal' => 'Decimal', + 'email' => 'Email', + 'url' => 'URL', + 'configuration' => 'Configuración', + 'status' => 'Estado', + 'yes' => 'Sí', + 'no' => 'No', + 'value_per_locale' => 'Valor por lugar', + 'value_per_channel' => 'Valor por canal', + 'value_per_channel' => 'Valor por canal', + 'is_filterable' => 'Usar en navegación por capas', + 'is_configurable' => 'Usar para crear producto configurable', + 'admin_name' => 'Nombre del admin', + 'is_visible_on_front' => 'Visible en la página de vista de producto en Front-end', + 'swatch_type' => 'Tipo de muestra', + 'dropdown' => 'Desplegable', + 'color-swatch' => 'Color muestra', + 'image-swatch' => 'Imagen muestra', + 'text-swatch' => 'Texto muestra', + 'swatch' => 'Muestra', + 'image' => 'Imagen', + 'file' => 'Archivo', + 'checkbox' => 'Opción múltiple', + 'use_in_flat' => "Crear en tabla plana de productos", + 'is_comparable' => "El atributo es comparable", + 'default_null_option' => 'Crear opción vacía por defecto', + ], + 'families' => [ + 'title' => 'Familias', + 'add-family-btn-title' => 'Agregar familia', + 'add-title' => 'Agregar familia', + 'edit-title' => 'Editar familia', + 'save-btn-title' => 'Guardar familia', + 'general' => 'General', + 'code' => 'Código familia', + 'name' => 'Nombre', + 'groups' => 'Grupos', + 'add-group-title' => 'Agregar grupo', + 'position' => 'Posición', + 'attribute-code' => 'Código', + 'type' => 'Tipo', + 'add-attribute-title' => 'Agregar atributos', + 'search' => 'Buscar', + 'group-exist-error' => 'Ya existe un grupo con el mismo nombre.' + ], + 'categories' => [ + 'title' => 'Categorías', + 'add-title' => 'Agregar categoría', + 'edit-title' => 'Editar categoría', + 'save-btn-title' => 'Guardar categoría', + 'general' => 'General', + 'name' => 'Nombre', + 'visible-in-menu' => 'Visible en el menú', + 'yes' => 'Sí', + 'no' => 'No', + 'position' => 'Posición', + 'display-mode' => 'Modo de visualización', + 'products-and-description' => 'Productos y descripción', + 'products-only' => 'Solo productos', + 'description-only' => 'Solo descripción', + 'description-and-images' => 'Descripción e imágenes', + 'description' => 'Descripción', + 'parent-category' => 'Categoría padre', + 'seo' => 'SEO', + 'slug' => 'Slug', + 'meta_title' => 'Meta Title', + 'meta_description' => 'Meta Description', + 'meta_keywords' => 'Meta Keywords', + 'image' => 'Imagen', + 'filterable-attributes' => 'Atributos filtrables', + 'attributes' => 'Atributos', + ] + ], + + 'configuration' => [ + 'title' => 'Configuración', + 'save-btn-title' => 'Guardar', + 'save-message' => 'Configuración guardada con éxito', + 'yes' => 'Sí', + 'no' => 'No', + 'delete' => 'Borrar', + + 'tax-categories' => [ + 'title' => 'Categorías de impuestos', + 'add-title' => 'Agregar categoría de impuestos', + 'edit-title' => 'Editar categoría de impuestoss', + 'save-btn-title' => 'Guardar categoría de impuestos', + 'general' => 'Categorías de impuestos', + 'select-channel' => 'Seleccione canal', + 'name' => 'Nombre', + 'code' => 'Código', + 'description' => 'Descripción', + 'select-taxrates' => 'Seleccione tasa de impuestos', + 'edit' => [ + 'title' => 'Editar categoría de impuestos', + 'edit-button-title' => 'Editar categoría de impuestos' + ] + ], + + 'tax-rates' => [ + 'title' => 'Tasas de impuestos', + 'add-title' => 'Agregar tasa de impuesto', + 'edit-title' => 'Editar tasa de impuesto', + 'save-btn-title' => 'Guardar tasa de impuesto', + 'general' => 'Tasa de impuesto', + 'identifier' => 'Identificador', + 'is_zip' => 'Habilitar rango Zip', + 'zip_from' => 'Zip desde', + 'zip_to' => 'Zip hasta', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'tax_rate' => 'Tasa', + 'edit' => [ + 'title' => 'Editar tasa de impuesto', + 'edit-button-title' => 'Editar tasa' + ], + 'zip_code' => 'Código Zip', + 'is_zip' => 'Habilitar rango Zip', + ], + + 'sales' => [ + 'shipping-method' => [ + 'title' => 'Método de envíos', + 'save-btn-title' => 'Guardar', + 'description' => 'Descripción', + 'active' => 'Activo', + 'status' => 'Estado' + ] + ] + ], + + 'settings' => [ + 'locales' => [ + 'title' => 'Lugares', + 'add-title' => 'Agregar lugar', + 'edit-title' => 'Editar lugar', + 'add-title' => 'Agregar lugar', + 'save-btn-title' => 'Guardar lugar', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'direction' => 'Dirección', + 'create-success' => 'Lugar creado con éxito.', + 'update-success' => 'Lugar actualizado con éxito.', + 'delete-success' => 'Lugar borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos un lugar.', + ], + 'countries' => [ + 'title' => 'Países', + 'add-title' => 'Agregar país', + 'save-btn-title' => 'Guardar país', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre' + ], + 'currencies' => [ + 'title' => 'Monedas', + 'add-title' => 'Agregar moneda', + 'edit-title' => 'Editar moneda', + 'save-btn-title' => 'Guardar moneda', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'symbol' => 'Símbolo', + 'create-success' => 'Moneda creada con éxito.', + 'update-success' => 'Moneda actualizada con éxito.', + 'delete-success' => 'Moneda borrada con éxito.', + 'last-delete-error' => 'Se requiere al menos una moneda.', + ], + 'exchange_rates' => [ + 'title' => 'Tasas de cambio', + 'add-title' => 'Agregar tasa de cambio', + 'edit-title' => 'Editar tasa de cambio', + 'save-btn-title' => 'Guardar tasa de cambio', + 'general' => 'General', + 'source_currency' => 'Moneda origen', + 'target_currency' => 'Moneda destino', + 'rate' => 'Tasa', + 'exchange-class-not-found' => ':service exchange rate class not found', + 'update-rates' => 'Actualizar tasas', + 'create-success' => 'Tasa de cambio creada con éxito.', + 'update-success' => 'Tasa de cambio actualizada con éxito.', + 'delete-success' => 'Tasa de cambio borrada con éxito.', + 'last-delete-error' => 'Se requiere al menos una tasa de cambio.', + ], + 'inventory_sources' => [ + 'title' => 'Fuentes de inventario', + 'add-title' => 'Agregar fuente de inventario', + 'edit-title' => 'Editar fuente de inventario', + 'save-btn-title' => 'Guardar fuente de inventario', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'source-is-active' => 'Está activa', + 'contact-info' => 'Información de contacto', + 'contact_name' => 'Nombre', + 'contact_email' => 'Email', + 'contact_number' => 'Número de contacto', + 'contact_fax' => 'Fax', + 'address' => 'Dirección', + 'country' => 'País', + 'state' => 'Departamento', + 'city' => 'Ciudad', + 'street' => 'Dirección', + 'postcode' => 'Código postal', + 'priority' => 'Prioridad', + 'latitude' => 'Latitud', + 'longitude' => 'Longitud', + 'status' => 'Estado', + 'create-success' => 'Fuente de inventario creado con éxito.', + 'update-success' => 'Fuente de inventario actualizado con éxito.', + 'delete-success' => 'Fuente de inventario borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos una fuente de inventario.', + ], + 'channels' => [ + 'title' => 'Canales', + 'add-title' => 'Agregar canal', + 'edit-title' => 'Editar canal', + 'save-btn-title' => 'Guardar canal', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'hostname' => 'Hostname', + 'currencies-and-locales' => 'Monedas y lugares', + 'locales' => 'Lugares', + 'default-locale' => 'Lugar predeterminado', + 'currencies' => 'Monedas', + 'base-currency' => 'Moneda predeterminada', + 'root-category' => 'Categoría raíz', + 'inventory_sources' => 'Fuentes de inventario', + 'design' => 'Diseño', + 'theme' => 'Tema', + 'home_page_content' => 'Contenido página de inicio', + 'footer_content' => 'Contenido pie de página', + 'logo' => 'Logo', + 'favicon' => 'Favicon', + 'create-success' => 'Canal creado con éxito.', + 'update-success' => 'Canal actualizado con éxito.', + 'delete-success' => 'Canal borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos un canal.', + 'seo' => 'SEO página de inicio', + 'seo-title' => 'Meta title', + 'seo-description' => 'Meta description', + 'seo-keywords' => 'Meta keywords', + + ], + + 'sliders' => [ + 'title' => 'Sliders', + 'name' => 'Nombre', + 'add-title' => 'Crear slider', + 'edit-title' => 'Editar slider', + 'save-btn-title' => 'Guardar slider', + 'general' => 'General', + 'image' => 'Imagen', + 'content' => 'Contenido', + 'channels' => 'Canal', + 'created-success' => 'Slider creado con éxito', + 'created-fault' => 'Error al intentar crear el slider', + 'update-success' => 'Slider actualizado con éxito', + 'update-fail' => 'El slider no pudo ser actualizado', + 'delete-success' => 'No puede borrar el último slider', + 'delete-fail' => 'Slider borrado con éxito' + ], + + 'tax-categories' => [ + 'title' => 'Categorías de impuestos', + 'add-title' => 'Crear categoría de impuestos', + 'edit-title' => 'Editar categoría de impuestos', + 'save-btn-title' => 'Guardar categoría de impuestos', + 'general' => 'General', + 'select-channel' => 'Seleccione canal', + 'name' => 'Nombre', + 'code' => 'Código', + 'description' => 'Descripción', + 'select-taxrates' => 'Seleccione tasa de impuestos', + 'edit' => [ + 'title' => 'Editar categoría de impuestos', + 'edit-button-title' => 'Editar categoría de impuestos' + ], + 'create-success' => 'Nueva categoría de impuestos creada con éxito', + 'create-error' => 'Error mientras se creaba la categoría de impuestos', + 'update-success' => 'La categoría de impuestos fue actualizada con éxito', + 'update-error' => 'Error mientras se actualizaba la categoría de impuestos', + 'atleast-one' => 'No puede borrar la última categoría de impuestos', + 'delete' => 'La categoría de impuestos fue borrada' + ], + + 'tax-rates' => [ + 'title' => 'Tasas de impuestos', + 'add-title' => 'Crear tasa de impuesto', + 'edit-title' => 'Editar tasa de impuesto', + 'save-btn-title' => 'Guardar tasa de impuesto', + 'general' => 'Tasa de impuesto', + 'identifier' => 'Identificador', + 'is_zip' => 'Habilitar rango Zip', + 'zip_from' => 'Zip desde', + 'zip_to' => 'Zip hasta', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'tax_rate' => 'Tasa', + 'edit' => [ + 'title' => 'Editar tasa de impuesto', + 'edit-button-title' => 'Editar tasa' + ], + 'zip_code' => 'Código Zip', + 'is_zip' => 'Habilitar rango Zip', + 'create-success' => 'Tasa de impuesto creada con éxito', + 'create-error' => 'No se puede crear la tasa de impuesto', + 'update-success' => 'Tasa de impuesto actualizada con éxito', + 'update-error' => '¡Error! La tasa de impuesto no pudo ser actualizada', + 'delete' => 'La tasa de impuesto fue borrada con éxito', + 'atleast-one' => 'No se pudo borrar la tasa de impuesto' + ], + 'development' => [ + 'title' => 'Desarrollo', + ] + ], + + 'customers' => [ + 'groups' =>[ + 'add-title' => 'Agregar grupo', + 'edit-title' => 'Editar grupo', + 'save-btn-title' => 'Guardar grupo', + 'title' => 'Grupos', + 'save-btn-title' => 'Guardar grupo', + 'code' => 'Código', + 'name' => 'Nombre', + 'is_user_defined' => 'Usuario definido', + 'yes' => 'Sí' + ], + + 'addresses' => [ + 'title' => 'Lista de direcciones de :customer_name', + 'vat_id' => 'Vat id', + 'create-title' => 'Crear dirección del cliente', + 'edit-title' => 'Actualizar dirección del cliente', + 'title-orders' => 'Lista de pedidos de :customer_name', + 'address-list' => 'Lista de direcciones', + 'order-list' => 'Lista de pedidos', + 'address-id' => 'Dirección ID', + 'address-1' => 'Dirección 1', + 'city' => 'Ciudad', + 'state-name' => 'Departamento', + 'country-name' => 'País', + 'postcode' => 'Código postal', + 'default-address' => 'Dirección predeterminada', + 'yes' => 'Sí', + 'not-approved' => 'No aprobado', + 'no' => 'No', + 'dash' => '-', + 'delete' => 'Borrar', + 'create-btn-title' => 'Agregar dirección', + 'save-btn-title' => 'Guardar dirección', + 'general' => 'General', + 'success-create' => 'Dirección del cliente creada con éxito.', + 'success-update' => 'Dirección del cliente actualizada con éxito.', + 'success-delete' => 'Dirección del cliente borrada con éxito.', + 'success-mass-delete' => 'Las direcciones seleccionadas han sido borradas con éxito.', + 'error-create' => 'La dirección del cliente no fue creada.', + ], + + 'note' => [ + 'title' => 'Agregar nota', + 'save-note' => 'Guardar nota', + 'enter-note' => 'Ingresar nota', + 'help-title' => 'Agregar una nota a este cliente' + ], + + 'customers' => [ + 'add-title' => 'Agregar cliente', + 'edit-title' => 'Editar cliente', + 'title' => 'Clientes', + 'first_name' => 'Primer nombre', + 'last_name' => 'Apellidos', + 'gender' => 'Género', + 'email' => 'Email', + 'date_of_birth' => 'Fecha de nacimiento', + 'phone' => 'Teléfono', + 'customer_group' => 'Grupo', + 'save-btn-title' => 'Guardar cliente', + 'channel_name' => 'Nombre del canal', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'other' => 'Otro', + 'male' => 'Masculino', + 'female' => 'Femenino', + 'phone' => 'Teléfono', + 'group-default' => 'No puede borrar el grupo predeterminado.', + 'edit-help-title' => 'Editar cliente', + 'delete-help-title' => 'Borrar cliente', + 'addresses' => 'Direcciones', + 'mass-destroy-success' => 'Clientes borrados con éxito', + 'mass-update-success' => 'Clientes actualizados con éxito', + 'status' => 'Estado', + 'active' => 'Activo', + 'inactive' => 'Inactivo' + ], + + 'reviews' => [ + 'title' => 'Opiniones', + 'edit-title' => 'Editar opinión', + 'rating' => 'Calificación', + 'status' => 'Estado', + 'comment' => 'Comentario', + 'pending' => 'Pendiente', + 'approved' => 'Aprobado', + 'disapproved' => 'Desaprobado' + ], + + 'subscribers' => [ + 'title' => 'Suscriptores', + 'title-edit' => 'Editar suscriptor', + 'email' => 'Email', + 'is_subscribed' => 'Suscrito', + 'edit-btn-title' => 'Actualizar suscriptor', + 'update-success' => 'El suscriptor fue actualizado con éxito', + 'update-failed' => '¡Error! No puede desuscribir al suscriptor', + 'delete' => 'El suscriptor fue borrado con éxito', + 'delete-failed' => '¡Error! El suscriptor no pudo ser borrado' + ] + ], + + 'promotions' => [ + 'cart-rules' => [ + 'title' => 'Reglas del carrito', + 'add-title' => 'Agregar regla de carrito', + 'edit-title' => 'Editar regla de carrito', + 'save-btn-title' => 'Guardar regla de carrito', + 'rule-information' => 'Información de regla', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'status' => 'Estado', + 'is-active' => 'La regla está activa', + 'channels' => 'Canales', + 'customer-groups' => 'Grupos', + 'coupon-type' => 'Tipo de cupón', + 'no-coupon' => 'No. de cupón', + 'specific-coupon' => 'Cupón específico', + 'auto-generate-coupon' => 'Auto generar cupón', + 'no' => 'No', + 'yes' => 'Sí', + 'coupon-code' => 'Código de cupón', + 'uses-per-coupon' => 'Usos por cupón', + 'uses-per-customer' => 'Usos por cliente', + 'uses-per-customer-control-info' => 'Será usado para clientes conectados solamente.', + 'from' => 'Desde', + 'to' => 'Hasta', + 'priority' => 'Prioridad', + 'conditions' => 'Condiciones', + 'condition-type' => 'Tipo de condición', + 'all-conditions-true' => 'Todas las condiciones son verdaderas', + 'any-condition-true' => 'Cualquier condición es verdadera', + 'add-condition' => 'Agregar condición', + 'choose-condition-to-add' => 'Elija una condición para agregar', + 'cart-attribute' => 'Atributo de carrito', + 'subtotal' => 'Subtotal', + 'total-item-qty' => 'Cant total artículos', + 'total-weight' => 'Peso total', + 'payment-method' => 'Método de pago', + 'shipping-method' => 'Método de envío', + 'shipping-postcode' => 'Código postal/Zip de envío', + 'shipping-state' => 'Departamento de envío', + 'shipping-country' => 'País de envío', + 'cart-item-attribute' => 'Atributo del artículo del carrito', + 'price-in-cart' => 'Precio en el carrito', + 'qty-in-cart' => 'Cantidad en el carrito', + 'product-attribute' => 'Atributo de producto', + 'attribute-name-children-only' => ':attribute_name (Solo hijos)', + 'attribute-name-parent-only' => ':attribute_name (Solo padre)', + 'is-equal-to' => 'Es igual a', + 'is-not-equal-to' => 'No es igual a', + 'equals-or-greater-than' => 'Iguales o más grandes que', + 'equals-or-less-than' => 'Iguales o menos que', + 'greater-than' => 'Más grande que', + 'less-than' => 'Menos que', + 'contain' => 'Contiene', + 'contains' => 'Contiene', + 'does-not-contain' => 'No contiene', + 'actions' => 'Acciones', + 'action-type' => 'Tipo de acción', + 'percentage-product-price' => 'Porcentaje del precio del producto', + 'fixed-amount' => 'Monto fijo', + 'fixed-amount-whole-cart' => 'Monto fijo a todo el carrito', + 'buy-x-get-y-free' => 'Compre X y lleve Y gratis', + 'discount-amount' => 'Monto descuento', + 'discount-quantity' => 'La cantidad a descontar máxima permitida', + 'discount-step' => 'Compre X cantidad', + 'free-shipping' => 'Envío gratis', + 'apply-to-shipping' => 'Aplicar al envío', + 'coupon-codes' => 'Códigos de cupón', + 'coupon-qty' => 'Cant de cupón', + 'code-length' => 'Largo de código', + 'code-format' => 'Formato de código', + 'alphanumeric' => 'Alfanumérico', + 'alphabetical' => 'Alfabético', + 'numeric' => 'Numérico', + 'code-prefix' => 'Prefijo código', + 'code-suffix' => 'Sufijo código', + 'generate' => 'Generar', + 'cart-rule-not-defind-error' => 'La regla de carrito no está definida', + 'mass-delete-success' => 'Todos los cupones seleccionados han sido borrados con éxito.', + 'end-other-rules' => 'Terminar otras reglas', + 'children-categories' => 'Categorías (Solo hijos)', + 'parent-categories' => 'Categorías (Solo padre)', + 'categories' => 'Categorías', + 'attribute_family' => 'Familia de atributos' + ], + + 'catalog-rules' => [ + 'title' => 'Reglas del catálogo', + 'add-title' => 'Agregar regla del catálogo', + 'edit-title' => 'Editar regla del catálogo', + 'save-btn-title' => 'Guardar regla del catálogo', + 'rule-information' => 'Información de regla', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'status' => 'Estado', + 'is-active' => 'La regla del catálogo está activa', + 'channels' => 'Canales', + 'customer-groups' => 'Grupos', + 'no' => 'No', + 'yes' => 'Sí', + 'from' => 'Desde', + 'to' => 'Hasta', + 'priority' => 'Prioridad', + 'conditions' => 'Condiciones', + 'condition-type' => 'Tipo de condición', + 'all-conditions-true' => 'Todas las condiciones son verdaderas', + 'any-condition-true' => 'Cualquier condición es verdadera', + 'add-condition' => 'Agregar condición', + 'choose-condition-to-add' => 'Elija una condición para agregar', + 'product-attribute' => 'Atributo de producto', + 'attribute-name-children-only' => ':attribute_name (Solo hijos)', + 'attribute-name-parent-only' => ':attribute_name (Solo padre)', + 'is-equal-to' => 'Es igual a', + 'is-not-equal-to' => 'No es igual a', + 'equals-or-greater-than' => 'Iguales o más grandes que', + 'equals-or-less-than' => 'Iguales o menos que', + 'greater-than' => 'Más grande que', + 'less-than' => 'Menos que', + 'contain' => 'Contiene', + 'contains' => 'Contienes', + 'does-not-contain' => 'No contiene', + 'actions' => 'Acciones', + 'action-type' => 'Tipo de acción', + 'percentage-product-price' => 'Porcentaje del precio del producto', + 'fixed-amount' => 'Monto fijo', + 'fixed-amount-whole-cart' => 'Monto fijo a todo el catálogo', + 'buy-x-get-y-free' => 'Compre X y lleve Y gratis', + 'discount-amount' => 'Monto descuento', + 'mass-delete-success' => 'Todos los cupones seleccionados han sido borrados con éxito.', + 'end-other-rules' => 'Terminar otras reglas', + 'categories' => 'Categorías', + 'attribute_family' => 'Familia de atributos' + ] + ], + + 'error' => [ + 'go-to-home' => 'REGRESAR AL INICIO', + 'in-maitainace' => 'En mantenimiento', + 'right-back' => 'Estaremos de vuelta', + + '404' => [ + 'page-title' => '404 página no encontrada', + 'name' => '404', + 'title' => 'Página no encontrada', + 'message' => 'La página que está buscando no existe o ha sido movida. Navegue usando el menú lateral.' + ], + '403' => [ + 'page-title' => '403 prohibido', + 'name' => '403', + 'title' => 'Prohibido', + 'message' => 'Usted no tiene permisos para acceder a esta página' + ], + '500' => [ + 'page-title' => '500 error interno de servidor', + 'name' => '500', + 'title' => 'Error interno de servidor', + 'message' => 'El servidor encontró un error interno.' + ], + '401' => [ + 'page-title' => '401 no autorizado', + 'name' => '401', + 'title' => 'No autorizado', + 'message' => 'La solicitud no se ha aplicado porque carece de credenciales de autenticación válidas para el recurso de destino.' + ], + ], + + 'export' => [ + 'export' => 'Exportar', + 'import' => 'Importar', + 'format' => 'Seleccione el formato', + 'download' => 'Descargar', + 'upload' => 'Subir', + 'csv' => 'CSV', + 'xls' => 'XLS', + 'file' => 'Archivo', + 'upload-error' => 'El archivo debe ser un archivo tipo: xls, xlsx, csv.', + 'duplicate-error' => 'El identificador debe ser único, identificador duplicado :identifier en la fila :position.', + 'enough-row-error' => 'el archivo no tiene suficientes filas', + 'allowed-type' => 'Tipo permitido :', + 'file-type' => 'csv, xls, xlsx.', + 'no-records' => 'Nada para exportar', + 'illegal-format' => '¡Error! Este tipo de formato no es compatible o es ilegal' + ], + + 'cms' => [ + 'pages' => [ + 'general' => 'General', + 'seo' => 'SEO', + 'pages' => 'Páginas', + 'title' => 'Páginas', + 'add-title' => 'Agregar página', + 'content' => 'Contenido', + 'url-key' => 'URL clave', + 'channel' => 'Canales', + 'locale' => 'Lugares', + 'create-btn-title' => 'Guardar página', + 'edit-title' => 'Editar Page', + 'edit-btn-title' => 'Guardar página', + 'create-success' => 'Página creada con éxito', + 'create-partial' => 'Algunas de las páginas solicitadas ya existen', + 'create-failure' => 'Todas las páginas solicitadas ya existen', + 'update-success' => 'Página actualizada con éxito', + 'update-failure' => 'La página no pudo ser actualizada', + 'page-title' => 'Título de la página', + 'layout' => 'Diseño', + 'meta_keywords' => 'Meta Keywords', + 'meta_description' => 'Meta Description', + 'meta_title' => 'Meta Title', + 'delete-success' => 'Página CMS borrada con éxito', + 'delete-failure' => 'Página CMS no pudo ser borrada', + 'preview' => 'Previsualización', + 'one-col' => '
Usar class: "static-container one-column" para diseño de una columna.
', + 'two-col' => '
Usar class: "static-container two-column" para diseño de dos columnas.
', + 'three-col' => '
Usar class: "static-container three-column" para diseño de tres columnas.
', + 'helper-classes' => 'Clases de ayuda' + ] + ], + + 'response' => [ + 'being-used' => 'Este recurso: :name está siendo usado en :source', + 'cannot-delete-default' => 'No puede borrar el canal predeterminado', + 'create-success' => ':name :name creado con éxito.', + 'update-success' => ':name actualizado con éxito.', + 'delete-success' => ':name borrado con éxito.', + 'delete-failed' => 'Se encontró un error mientras borraba :name.', + 'last-delete-error' => 'Se requiere al menos un :name.', + 'user-define-error' => 'No puede borrar sistema :name', + 'attribute-error' => ':name está siendo usado en productos configurables.', + 'attribute-product-error' => ':name está siendo usado en productos.', + 'customer-associate' => ':name no puede ser borrado porque el cliente está asociado a este grupo.', + 'currency-delete-error' => 'Esta moneda está definida como moneda base de un canal por lo tanto no puede ser borrada.', + 'upload-success' => ':name subido con éxito.', + 'delete-category-root' => 'No puede borrar la categoría raíz', + 'create-root-failure' => 'Una categoría con nombre raíz ya existe', + 'cancel-success' => ':name cancelado con éxito.', + 'cancel-error' => ':name no puede ser cancelado.', + 'already-taken' => 'El :name ya ha sido tomado.', + 'order-pending' => 'No puede borrar la cuenta porque algun(os) pedido(s) están en estado pendiente o procesando.' + ], + + 'footer' => [ + 'copy-right' => 'Powered by Bagisto, A Community Project by Webkul', + ], + + 'admin' => [ + 'emails' => [ + 'email' => 'Email', + 'notification_label' => 'Notificaciones', + 'notifications' => [ + 'verification' => 'Enviar email de verificación', + 'registration' => 'Enviar email de registro', + 'customer' => 'Enviar email de cliente', + 'new-order' => 'Enviar email de confirmación de pedido', + 'new-admin' => 'Enviar email de invitación de admin', + 'new-invoice' => 'Enviar email de confirmación de factura', + 'new-refund' => 'Enviar email de "El monto de reembolso no debe ser cero"', + 'new-shipment' => 'Enviar email de notificación de envío de pedido', + 'new-inventory-source' => 'Enviar email de notificación de nueva fuente de inventario', + 'cancel-order' => 'Enviar email de notificación de cancelación de pedido', + ], + + ], + 'system' => [ + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'guest-checkout' => 'Compras como invitado', + 'allow-guest-checkout' => 'Permitir compras como invitado', + 'allow-guest-checkout-hint' => 'Aviso: Si eligió permitir, esta opción puede ser configurada específicamente para cada producto.', + 'review' => 'Opiniones', + 'allow-guest-review' => 'Permitir opiniones como invitado', + 'inventory' => 'Inventario', + 'stock-options' => 'Opciones de stock', + 'allow-backorders' => 'Permitir backorders', + 'customer' => 'Cliente', + 'settings' => 'Ajustes', + 'address' => 'Dirección', + 'street-lines' => 'Líneas en la dirección', + 'sales' => 'Ventas', + 'shipping-methods' => 'Método de envíos', + 'free-shipping' => 'Envío gratis', + 'flate-rate-shipping' => 'Envío con tarifa plana', + 'shipping' => 'Envío', + 'origin' => 'Origen', + 'country' => 'País', + 'state' => 'Departamento', + 'zip' => 'Zip', + 'city' => 'Ciudad', + 'street-address' => 'Dirección', + 'title' => 'Título', + 'description' => 'Descripción', + 'rate' => 'Tasa', + 'status' => 'Estado', + 'type' => 'Tipo', + 'payment-methods' => 'Métodos de pago', + 'cash-on-delivery' => 'Pago contraentrega', + 'money-transfer' => 'Transferencia', + 'paypal-standard' => 'Paypal', + 'business-account' => 'Cuenta de negocio', + 'newsletter' => 'Suscripción a newsletter', + 'newsletter-subscription' => 'Permitir suscripciones a newsletter', + 'email' => 'Verificación de email', + 'email-verification' => 'Permitir verificación de email', + 'sort_order' => 'Orden de clasificación', + 'general' => 'General', + 'footer' => 'Pie de página', + 'content' => 'Contenido', + 'footer-content' => 'Texto de pie de página', + 'footer-toggle' => 'Mostrar/Esconder pie de página', + 'locale-options' => 'Opciones de unidades', + 'weight-unit' => 'Unidad de peso', + 'email-settings' => 'Ajustes de email', + 'email-sender-name' => 'Nombre de remitente', + 'shop-email-from' => 'Email de tienda [Para envío de emails]', + 'admin-name' => 'Nombre del admin', + 'admin-email' => 'Email del admin', + 'admin-page-limit' => 'Artículos por página predeterminado (Admin)', + 'design' => 'Diseño', + 'admin-logo' => 'Logo del admin', + 'logo-image' => 'Imagen logo', + 'credit-max' => 'Crédito máximo para el cliente', + 'credit-max-value' => 'Valor máximo de crédito para el cliente', + 'use-credit-max' => 'Usar crédito máximo', + 'order-settings' => 'Ajustes de pedido', + 'orderNumber' => 'Pedido #', + 'order-number-prefix' => 'Prefijo para Pedido #', + 'order-number-length' => 'Largo para Pedido #', + 'order-number-suffix' => 'Sufijo para Pedido #', + 'default' => 'Predeterminado', + 'sandbox' => 'Sandbox', + 'all-channels' => 'Todos', + 'all-locales' => 'Todos', + 'invoice-slip-design' => 'Diseño parte trasera factura', + 'logo' => 'logo' + ] + ] +]; From 262d72f4b65334313917775da99ef6dc808fe511 Mon Sep 17 00:00:00 2001 From: Devansh Date: Tue, 4 Aug 2020 18:30:37 +0530 Subject: [PATCH 03/19] Issue Fixed --- packages/Webkul/Admin/src/Listeners/Order.php | 31 ++++++++++++++++--- .../src/Repositories/InvoiceRepository.php | 15 ++++++++- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/packages/Webkul/Admin/src/Listeners/Order.php b/packages/Webkul/Admin/src/Listeners/Order.php index f2e1c06c5..32a0642eb 100755 --- a/packages/Webkul/Admin/src/Listeners/Order.php +++ b/packages/Webkul/Admin/src/Listeners/Order.php @@ -3,17 +3,35 @@ namespace Webkul\Admin\Listeners; use Illuminate\Support\Facades\Mail; -use Webkul\Admin\Mail\NewOrderNotification; use Webkul\Admin\Mail\NewAdminNotification; -use Webkul\Admin\Mail\NewInvoiceNotification; -use Webkul\Admin\Mail\NewShipmentNotification; -use Webkul\Admin\Mail\NewInventorySourceNotification; -use Webkul\Admin\Mail\CancelOrderNotification; +use Webkul\Admin\Mail\NewOrderNotification; use Webkul\Admin\Mail\NewRefundNotification; +use Webkul\Admin\Mail\NewInvoiceNotification; +use Webkul\Admin\Mail\CancelOrderNotification; +use Webkul\Admin\Mail\NewShipmentNotification; use Webkul\Admin\Mail\OrderCommentNotification; +use Webkul\Sales\Repositories\InvoiceRepository; +use Webkul\Admin\Mail\NewInventorySourceNotification; class Order { + /** + * InvoiceRepository object + * + * @var \Webkul\Sales\Repositories\InvoiceRepository + */ + protected $invoiceRepository; + + /** + * Create a new repository instance using reflection api. + * + * @param \Webkul\Sales\Repositories\InvoiceRepository + */ + public function __construct(InvoiceRepository $invoiceRepository) + { + $this->invoiceRepository = $invoiceRepository; + } + /** * Send new order Mail to the customer and admin * @@ -47,6 +65,8 @@ class Order */ public function sendNewInvoiceMail($invoice) { + $invoiceLocale = $this->invoiceRepository->getLocaleOfTheInvoice($invoice); + try { if ($invoice->email_sent) { return; @@ -55,6 +75,7 @@ class Order $configKey = 'emails.general.notifications.emails.general.notifications.new-invoice'; if (core()->getConfigData($configKey)) { + app()->setLocale($invoiceLocale); Mail::queue(new NewInvoiceNotification($invoice)); } } catch (\Exception $e) { diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index 8f4f605e6..cb7b9418c 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -106,7 +106,7 @@ class InvoiceRepository extends Repository foreach ($data['invoice']['items'] as $itemId => $qty) { if (! $qty) { - continue; + continue; } $orderItem = $this->orderItemRepository->find($itemId); @@ -256,4 +256,17 @@ class InvoiceRepository extends Repository return $invoice; } + + /** + * Get the locale of the invoice if somehow item name changes then the english locale will pe provided. + * + * @param \Webkul\Sales\Contracts\Invoice $invoice + * @return string + */ + public function getLocaleOfTheInvoice($invoice) + { + $invoiceFirstItem = $invoice->items->first(); + $invoiceFlatProduct = $invoiceFirstItem->product->product_flats->where('name', $invoiceFirstItem->name)->first(); + return $invoiceFlatProduct ? $invoiceFlatProduct->locale : 'en'; + } } \ No newline at end of file From c6646677f26e0260e84657ebc5f1b0536ba8b362 Mon Sep 17 00:00:00 2001 From: Devansh Date: Thu, 6 Aug 2020 16:31:05 +0530 Subject: [PATCH 04/19] Customer Locale Added For All Mail --- packages/Webkul/Admin/src/Listeners/Order.php | 92 +++++++++++-------- .../src/Repositories/InvoiceRepository.php | 13 --- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/packages/Webkul/Admin/src/Listeners/Order.php b/packages/Webkul/Admin/src/Listeners/Order.php index 43a1a65a1..55946e39f 100755 --- a/packages/Webkul/Admin/src/Listeners/Order.php +++ b/packages/Webkul/Admin/src/Listeners/Order.php @@ -10,29 +10,11 @@ use Webkul\Admin\Mail\NewInvoiceNotification; use Webkul\Admin\Mail\CancelOrderNotification; use Webkul\Admin\Mail\NewShipmentNotification; use Webkul\Admin\Mail\OrderCommentNotification; -use Webkul\Sales\Repositories\InvoiceRepository; use Webkul\Admin\Mail\CancelOrderAdminNotification; use Webkul\Admin\Mail\NewInventorySourceNotification; class Order { - /** - * InvoiceRepository object - * - * @var \Webkul\Sales\Repositories\InvoiceRepository - */ - protected $invoiceRepository; - - /** - * Create a new repository instance using reflection api. - * - * @param \Webkul\Sales\Repositories\InvoiceRepository - */ - public function __construct(InvoiceRepository $invoiceRepository) - { - $this->invoiceRepository = $invoiceRepository; - } - /** * Send new order Mail to the customer and admin * @@ -41,17 +23,19 @@ class Order */ public function sendNewOrderMail($order) { + $customerLocale = $this->getLocale($order); + try { /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.new-order'; - if (core()->getConfigData($configKey)) - Mail::queue(new NewOrderNotification($order)); + if (core()->getConfigData($configKey)) { + $this->prepareMail($customerLocale, new NewOrderNotification($order)); + } /* email to admin */ $configKey = 'emails.general.notifications.emails.general.notifications.new-admin'; if (core()->getConfigData($configKey)) { - app()->setLocale(env('APP_LOCALE')); - Mail::queue(new NewAdminNotification($order)); + $this->prepareMail(env('APP_LOCALE'), new NewAdminNotification($order)); } } catch (\Exception $e) { report($e); @@ -66,18 +50,17 @@ class Order */ public function sendNewInvoiceMail($invoice) { - $invoiceLocale = $this->invoiceRepository->getLocaleOfTheInvoice($invoice); + $customerLocale = $this->getLocale($invoice); try { if ($invoice->email_sent) { return; } + /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.new-invoice'; - if (core()->getConfigData($configKey)) { - app()->setLocale($invoiceLocale); - Mail::queue(new NewInvoiceNotification($invoice)); + $this->prepareMail($customerLocale, new NewInvoiceNotification($invoice)); } } catch (\Exception $e) { report($e); @@ -92,11 +75,13 @@ class Order */ public function sendNewRefundMail($refund) { - try { - $configKey = 'emails.general.notifications.emails.general.notifications.new-refund'; + $customerLocale = $this->getLocale($refund); + try { + /* email to customer */ + $configKey = 'emails.general.notifications.emails.general.notifications.new-refund'; if (core()->getConfigData($configKey)) { - Mail::queue(new NewRefundNotification($refund)); + $this->prepareMail($customerLocale, new NewRefundNotification($refund)); } } catch (\Exception $e) { report($e); @@ -111,21 +96,23 @@ class Order */ public function sendNewShipmentMail($shipment) { + $customerLocale = $this->getLocale($shipment); + try { if ($shipment->email_sent) { return; } + /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.new-shipment'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewShipmentNotification($shipment)); + $this->prepareMail($customerLocale, new NewShipmentNotification($shipment)); } + /* email to admin */ $configKey = 'emails.general.notifications.emails.general.notifications.new-inventory-source'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewInventorySourceNotification($shipment)); + $this->prepareMail(env('APP_LOCALE'), new NewInventorySourceNotification($shipment)); } } catch (\Exception $e) { report($e); @@ -138,18 +125,19 @@ class Order */ public function sendCancelOrderMail($order) { + $customerLocale = $this->getLocale($order); + try { /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.cancel-order'; if (core()->getConfigData($configKey)) { - Mail::queue(new CancelOrderNotification($order)); + $this->prepareMail($customerLocale, new CancelOrderNotification($order)); } /* email to admin */ $configKey = 'emails.general.notifications.emails.general.notifications.new-admin'; if (core()->getConfigData($configKey)) { - app()->setLocale(env('APP_LOCALE')); - Mail::queue(new CancelOrderAdminNotification($order)); + $this->prepareMail(env('APP_LOCALE'), new CancelOrderAdminNotification($order)); } } catch (\Exception $e) { report($e); @@ -162,14 +150,44 @@ class Order */ public function sendOrderCommentMail($comment) { + $customerLocale = $this->getLocale($comment); + if (! $comment->customer_notified) { return; } try { - Mail::queue(new OrderCommentNotification($comment)); + /* email to customer */ + $this->prepareMail($customerLocale, new OrderCommentNotification($comment)); } catch (\Exception $e) { report($e); } } + + /** + * Get the locale of the customer if somehow item name changes then the english locale will pe provided. + * + * @param object \Webkul\Sales\Contracts\Order|\Webkul\Sales\Contracts\Invoice|\Webkul\Sales\Contracts\Refund|\Webkul\Sales\Contracts\Shipment|\Webkul\Sales\Contracts\OrderComment + * @return string + */ + private function getLocale($object) + { + if ($object instanceof \Webkul\Sales\Contracts\OrderComment) { + $object = $object->order; + } + + $objectFirstItem = $object->items->first(); + $objectFlatProduct = $objectFirstItem->product->product_flats->where('name', $objectFirstItem->name)->first(); + return $objectFlatProduct ? $objectFlatProduct->locale : 'en'; + } + + /** + * Prepare Mail. + * @return void + */ + private function prepareMail($locale, $notification) + { + app()->setLocale($locale); + Mail::queue($notification); + } } \ No newline at end of file diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index cb7b9418c..4ed72f12b 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -256,17 +256,4 @@ class InvoiceRepository extends Repository return $invoice; } - - /** - * Get the locale of the invoice if somehow item name changes then the english locale will pe provided. - * - * @param \Webkul\Sales\Contracts\Invoice $invoice - * @return string - */ - public function getLocaleOfTheInvoice($invoice) - { - $invoiceFirstItem = $invoice->items->first(); - $invoiceFlatProduct = $invoiceFirstItem->product->product_flats->where('name', $invoiceFirstItem->name)->first(); - return $invoiceFlatProduct ? $invoiceFlatProduct->locale : 'en'; - } } \ No newline at end of file From 8f33e82b2289328a1b97fb674b80713dcd727929 Mon Sep 17 00:00:00 2001 From: Devansh Date: Thu, 6 Aug 2020 16:34:11 +0530 Subject: [PATCH 05/19] Merged Changes From Master Removed My Created Method And Added Method Which Came From Master --- .../Sales/src/Repositories/InvoiceRepository.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php index bea00cae4..d92d86c52 100755 --- a/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php +++ b/packages/Webkul/Sales/src/Repositories/InvoiceRepository.php @@ -254,19 +254,6 @@ class InvoiceRepository extends Repository return $invoice; } - /** - * Get the locale of the invoice if somehow item name changes then the english locale will pe provided. - * - * @param \Webkul\Sales\Contracts\Invoice $invoice - * @return string - */ - public function getLocaleOfTheInvoice($invoice) - { - $invoiceFirstItem = $invoice->items->first(); - $invoiceFlatProduct = $invoiceFirstItem->product->product_flats->where('name', $invoiceFirstItem->name)->first(); - return $invoiceFlatProduct ? $invoiceFlatProduct->locale : 'en'; - } - /* * @param \Webkul\Sales\Contracts\Invoice $invoice * @return void From 9cbabe1a8b6af96d453e6e9e2def012951226a1a Mon Sep 17 00:00:00 2001 From: Devansh Date: Fri, 7 Aug 2020 16:46:50 +0530 Subject: [PATCH 06/19] Added Locale At The Time Of Order Placed --- packages/Webkul/Admin/src/Listeners/Order.php | 3 +-- packages/Webkul/Checkout/src/Cart.php | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Admin/src/Listeners/Order.php b/packages/Webkul/Admin/src/Listeners/Order.php index 55946e39f..887c0a4c2 100755 --- a/packages/Webkul/Admin/src/Listeners/Order.php +++ b/packages/Webkul/Admin/src/Listeners/Order.php @@ -177,8 +177,7 @@ class Order } $objectFirstItem = $object->items->first(); - $objectFlatProduct = $objectFirstItem->product->product_flats->where('name', $objectFirstItem->name)->first(); - return $objectFlatProduct ? $objectFlatProduct->locale : 'en'; + return isset($objectFirstItem->additional['locale']) ? $objectFirstItem->additional['locale'] : 'en'; } /** diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 5ff87a498..27c567265 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -904,7 +904,7 @@ class Cart 'discount_percent' => $data['discount_percent'], 'discount_amount' => $data['discount_amount'], 'base_discount_amount' => $data['base_discount_amount'], - 'additional' => $data['additional'], + 'additional' => array_merge($data['additional'], ['locale' => core()->getCurrentLocale()->code]), ]; if (isset($data['children']) && $data['children']) { From c956389251f1c4d815366a6522fab5f48cc82663 Mon Sep 17 00:00:00 2001 From: Devansh Date: Fri, 7 Aug 2020 17:30:06 +0530 Subject: [PATCH 07/19] Fixed Code According To Test Case --- packages/Webkul/Checkout/src/Cart.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/Webkul/Checkout/src/Cart.php b/packages/Webkul/Checkout/src/Cart.php index 27c567265..f1cd74ffd 100755 --- a/packages/Webkul/Checkout/src/Cart.php +++ b/packages/Webkul/Checkout/src/Cart.php @@ -886,6 +886,8 @@ class Cart */ public function prepareDataForOrderItem($data): array { + $locale = ['locale' => core()->getCurrentLocale()->code]; + $finalData = [ 'product' => $this->productRepository->find($data['product_id']), 'sku' => $data['sku'], @@ -904,7 +906,7 @@ class Cart 'discount_percent' => $data['discount_percent'], 'discount_amount' => $data['discount_amount'], 'base_discount_amount' => $data['base_discount_amount'], - 'additional' => array_merge($data['additional'], ['locale' => core()->getCurrentLocale()->code]), + 'additional' => is_array($data['additional']) ? array_merge($data['additional'], $locale) : $locale, ]; if (isset($data['children']) && $data['children']) { From 5c663c4f063a3397616e96eb85ddebfede1d112a Mon Sep 17 00:00:00 2001 From: Devansh Date: Mon, 10 Aug 2020 11:06:46 +0530 Subject: [PATCH 08/19] Message Removed --- .../Attribute/src/Http/Controllers/AttributeController.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php index 05e023153..2bee212d1 100755 --- a/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php +++ b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php @@ -159,8 +159,6 @@ class AttributeController extends Controller $suppressFlash = true; $this->attributeRepository->delete($value); - } else { - session()->flash('error', trans('admin::app.response.user-define-error', ['name' => 'Attribute'])); } } catch (\Exception $e) { report($e); From 5eda4c4fdc3bb8830934c4e516a673ca3d8d396e Mon Sep 17 00:00:00 2001 From: Devansh Date: Mon, 10 Aug 2020 13:53:12 +0530 Subject: [PATCH 09/19] Message Replaced --- .../Attribute/src/Http/Controllers/AttributeController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php index 2bee212d1..1c0301567 100755 --- a/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php +++ b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php @@ -172,7 +172,7 @@ class AttributeController extends Controller if ($suppressFlash) { session()->flash('success', trans('admin::app.datagrid.mass-ops.delete-success', ['resource' => 'attributes'])); } else { - session()->flash('info', trans('admin::app.datagrid.mass-ops.partial-action', ['resource' => 'attributes'])); + session()->flash('error', trans('admin::app.response.user-define-error', ['name' => 'Attribute'])); } return redirect()->back(); From 5663afec6ab1995a5618c1fef6015da345c458e0 Mon Sep 17 00:00:00 2001 From: rahulshukla-home Date: Mon, 10 Aug 2020 18:14:38 +0530 Subject: [PATCH 10/19] Issue #3494 fixed --- .../guest/compare/compare-products.blade.php | 97 +++++++------ .../Webkul/Velocity/src/Helpers/Helper.php | 2 +- .../guest/compare/compare-products.blade.php | 131 ++++++++---------- 3 files changed, 107 insertions(+), 123 deletions(-) diff --git a/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php b/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php index e47babc32..3cad11be0 100644 --- a/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/guest/compare/compare-products.blade.php @@ -25,13 +25,13 @@ $comparableAttributes = $comparableAttributes->toArray(); array_splice($comparableAttributes, 1, 0, [[ - 'code' => 'image', - 'admin_name' => 'Product Image' + 'admin_name' => 'Product Image', + 'type' => 'product_image' ]]); array_splice($comparableAttributes, 2, 0, [[ - 'code' => 'addToCartHtml', - 'admin_name' => 'Actions' + 'admin_name' => 'Actions', + 'type' => 'action' ]]); @endphp @@ -42,70 +42,67 @@ - @switch ($attribute['code']) - @case('name') + @switch ($attribute['type']) + @case('text')

+ @break; + + @case('textarea') + + @break; + + @case('price') + + @break; + + @case('boolean') + + @break; + + @case('select') + + @break; + + @case('multiselect') + @break + @case('file') + + + + + __ + @break; + @case('image') + + @break; + + @case('product_image') - @break + @break - @case('price') - - @break - - @case('addToCartHtml') + @case('action')
- @break + @break; - @case('color') - - @break - - @case('size') - - @break - - @case('description') - - @break - - @default - @switch ($attribute['type']) - @case('boolean') - - @break; - @case('file') - - - - - __ - @break; - @default - - @break; - @endswitch - - @break - - @endswitch + @endswitch @endforeach diff --git a/packages/Webkul/Velocity/src/Helpers/Helper.php b/packages/Webkul/Velocity/src/Helpers/Helper.php index 79c3e0977..0a93ecb19 100644 --- a/packages/Webkul/Velocity/src/Helpers/Helper.php +++ b/packages/Webkul/Velocity/src/Helpers/Helper.php @@ -385,7 +385,7 @@ class Helper extends Review $productMetaDetails = []; $productMetaDetails['slug'] = $product->url_key; - $productMetaDetails['image'] = $formattedProduct['image']; + $productMetaDetails['product_image'] = $formattedProduct['image']; $productMetaDetails['priceHTML'] = $formattedProduct['priceHTML']; $productMetaDetails['new'] = $formattedProduct['new']; $productMetaDetails['addToCartHtml'] = $formattedProduct['addToCartHtml']; diff --git a/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php b/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php index 9f770e03a..8606a0b0b 100644 --- a/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php +++ b/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php @@ -39,13 +39,13 @@ $comparableAttributes = $comparableAttributes->toArray(); array_splice($comparableAttributes, 1, 0, [[ - 'code' => 'image', - 'admin_name' => __('velocity::app.customer.compare.product_image') + 'admin_name' => 'Product Image', + 'type' => 'product_image' ]]); array_splice($comparableAttributes, 2, 0, [[ - 'code' => 'addToCartHtml', - 'admin_name' => __('velocity::app.customer.compare.actions') + 'admin_name' => 'Actions', + 'type' => 'action' ]]); @endphp @@ -56,76 +56,67 @@ - @switch ($attribute['code']) - @case('name') - -

+ @switch ($attribute['type']) + @case('text') +
+

+ @break; + + @case('textarea') + + @break; + + @case('price') + + @break; + + @case('boolean') + + @break; + + @case('select') + + @break; + + @case('multiselect') + @break + @case('file') + + + + + __ + @break; + @case('image') - + + @break; + + @case('product_image') + + :src="product['product_image']" + :onerror="`this.src='${baseUrl}/vendor/webkul/ui/assets/images/product/large-product-placeholder.png'`" /> - @break + @break - @case('price') - - @break - - @case('addToCartHtml') + @case('action')
- +
- - - close - +
- @break + @break; - @case('color') - - @break - - @case('size') - - @break - - @case('description') - - @break - - @default - @switch ($attribute['type']) - @case('boolean') - - @break; - @case('file') - - - arrow_downward - - __ - @break; - @default - - @break; - @endswitch - - @break - - @endswitch + @endswitch @endforeach @@ -218,22 +209,18 @@ if (productId == "all") { updatedItems = []; this.$set(this, 'products', []); - window.showAlert( - `alert-success`, - this.__('shop.general.alert.success'), - `${this.__('customer.compare.removed-all')}` - ); } else { updatedItems = existingItems.filter(item => item != productId); this.$set(this, 'products', this.products.filter(product => product.id != productId)); - window.showAlert( - `alert-success`, - this.__('shop.general.alert.success'), - `${this.__('customer.compare.removed')}` - ); } this.setStorageValue('compared_product', updatedItems); + + window.showAlert( + `alert-success`, + this.__('shop.general.alert.success'), + `${this.__('customer.compare.removed')}` + ); } this.$root.headerItemsCount++; From 84ba38ca2a71868eb399982a89ae06d9d5db084d Mon Sep 17 00:00:00 2001 From: rahulshukla-home Date: Mon, 10 Aug 2020 18:17:39 +0530 Subject: [PATCH 11/19] code updated --- .../guest/compare/compare-products.blade.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php b/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php index 8606a0b0b..9b0a89f72 100644 --- a/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php +++ b/packages/Webkul/Velocity/src/Resources/views/shop/guest/compare/compare-products.blade.php @@ -209,18 +209,24 @@ if (productId == "all") { updatedItems = []; this.$set(this, 'products', []); + + window.showAlert( + `alert-success`, + this.__('shop.general.alert.success'), + `${this.__('customer.compare.removed-all')}` + ); } else { updatedItems = existingItems.filter(item => item != productId); this.$set(this, 'products', this.products.filter(product => product.id != productId)); + + window.showAlert( + `alert-success`, + this.__('shop.general.alert.success'), + `${this.__('customer.compare.removed')}` + ); } this.setStorageValue('compared_product', updatedItems); - - window.showAlert( - `alert-success`, - this.__('shop.general.alert.success'), - `${this.__('customer.compare.removed')}` - ); } this.$root.headerItemsCount++; From 232db8f902029d18ed766b3c69603328fbacb927 Mon Sep 17 00:00:00 2001 From: Devansh Date: Mon, 10 Aug 2020 18:34:59 +0530 Subject: [PATCH 12/19] Added Three Column To Group By --- .../Admin/src/DataGrids/ProductDataGrid.php | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php index c46bdf271..845acc865 100644 --- a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php @@ -51,7 +51,7 @@ class ProductDataGrid extends DataGrid ->select( 'product_flat.locale', 'product_flat.channel', - 'product_flat.product_id as product_id', + 'product_flat.product_id', 'products.sku as product_sku', 'product_flat.name as product_name', 'products.type as product_type', @@ -61,17 +61,9 @@ class ProductDataGrid extends DataGrid DB::raw('SUM(DISTINCT ' . DB::getTablePrefix() . 'product_inventories.qty) as quantity') ); - if ($this->locale !== 'all') { - $queryBuilder->where('product_flat.locale', $this->locale); - } - - if ($this->channel !== 'all') { - $queryBuilder->where('product_flat.channel', $this->channel); - } - - $queryBuilder->groupBy('product_flat.product_id'); - $queryBuilder->having('locale', $this->locale !== 'all' ? $this->locale : 'en'); - $queryBuilder->having('channel', $this->channel !== 'all' ? $this->channel : 'default'); + $queryBuilder->groupBy('product_flat.product_id', 'product_flat.locale', 'product_flat.channel'); + $queryBuilder->where('locale', $this->locale !== 'all' ? $this->locale : 'en'); + $queryBuilder->where('channel', $this->channel !== 'all' ? $this->channel : 'default'); $this->addFilter('product_id', 'product_flat.product_id'); $this->addFilter('product_name', 'product_flat.name'); From 44181411bded4d9cb7ebb519b61082c9cad2d6bd Mon Sep 17 00:00:00 2001 From: jitendra Date: Mon, 10 Aug 2020 19:00:31 +0530 Subject: [PATCH 13/19] Multi theme system now supported in admin --- config/modules.php | 188 ------------------ config/themes.php | 10 + packages/Webkul/Theme/src/ThemeViewFinder.php | 34 ++-- packages/Webkul/Theme/src/Themes.php | 18 +- 4 files changed, 44 insertions(+), 206 deletions(-) delete mode 100644 config/modules.php diff --git a/config/modules.php b/config/modules.php deleted file mode 100644 index 37bf9a64e..000000000 --- a/config/modules.php +++ /dev/null @@ -1,188 +0,0 @@ - 'Modules', - - /* - |-------------------------------------------------------------------------- - | Module Stubs - |-------------------------------------------------------------------------- - | - | Default module stubs. - | - */ - - 'stubs' => [ - 'enabled' => false, - 'path' => base_path() . '/vendor/nwidart/laravel-modules/src/Commands/stubs', - 'files' => [ - 'start' => 'start.php', - 'routes' => 'Http/routes.php', - 'views/index' => 'Resources/views/index.blade.php', - 'views/master' => 'Resources/views/layouts/master.blade.php', - 'scaffold/config' => 'Config/config.php', - 'composer' => 'composer.json', - 'assets/js/app' => 'Resources/assets/js/app.js', - 'assets/sass/app' => 'Resources/assets/sass/app.scss', - 'webpack' => 'webpack.mix.js', - 'package' => 'package.json', - ], - 'replacements' => [ - 'start' => ['LOWER_NAME', 'ROUTES_LOCATION'], - 'routes' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'], - 'webpack' => ['LOWER_NAME'], - 'json' => ['LOWER_NAME', 'STUDLY_NAME', 'MODULE_NAMESPACE'], - 'views/index' => ['LOWER_NAME'], - 'views/master' => ['LOWER_NAME', 'STUDLY_NAME'], - 'scaffold/config' => ['STUDLY_NAME'], - 'composer' => [ - 'LOWER_NAME', - 'STUDLY_NAME', - 'VENDOR', - 'AUTHOR_NAME', - 'AUTHOR_EMAIL', - 'MODULE_NAMESPACE', - ], - ], - 'gitkeep' => true, - ], - 'paths' => [ - /* - |-------------------------------------------------------------------------- - | Modules path - |-------------------------------------------------------------------------- - | - | This path used for save the generated module. This path also will be added - | automatically to list of scanned folders. - | - */ - - 'modules' => base_path('Modules'), - /* - |-------------------------------------------------------------------------- - | Modules assets path - |-------------------------------------------------------------------------- - | - | Here you may update the modules assets path. - | - */ - - 'assets' => public_path('modules'), - /* - |-------------------------------------------------------------------------- - | The migrations path - |-------------------------------------------------------------------------- - | - | Where you run 'module:publish-migration' command, where do you publish the - | the migration files? - | - */ - - 'migration' => base_path('database/migrations'), - /* - |-------------------------------------------------------------------------- - | Generator path - |-------------------------------------------------------------------------- - | Customise the paths where the folders will be generated. - | Set the generate key to false to not generate that folder - */ - 'generator' => [ - 'config' => ['path' => 'Config', 'generate' => true], - 'command' => ['path' => 'Console', 'generate' => true], - 'migration' => ['path' => 'Database/Migrations', 'generate' => true], - 'seeder' => ['path' => 'Database/Seeders', 'generate' => true], - 'factory' => ['path' => 'Database/factories', 'generate' => true], - 'model' => ['path' => 'Entities', 'generate' => true], - 'controller' => ['path' => 'Http/Controllers', 'generate' => true], - 'filter' => ['path' => 'Http/Middleware', 'generate' => true], - 'request' => ['path' => 'Http/Requests', 'generate' => true], - 'provider' => ['path' => 'Providers', 'generate' => true], - 'assets' => ['path' => 'Resources/assets', 'generate' => true], - 'lang' => ['path' => 'Resources/lang', 'generate' => true], - 'views' => ['path' => 'Resources/views', 'generate' => true], - 'test' => ['path' => 'Tests', 'generate' => true], - 'repository' => ['path' => 'Repositories', 'generate' => false], - 'event' => ['path' => 'Events', 'generate' => false], - 'listener' => ['path' => 'Listeners', 'generate' => false], - 'policies' => ['path' => 'Policies', 'generate' => false], - 'rules' => ['path' => 'Rules', 'generate' => false], - 'jobs' => ['path' => 'Jobs', 'generate' => false], - 'emails' => ['path' => 'Emails', 'generate' => false], - 'notifications' => ['path' => 'Notifications', 'generate' => false], - 'resource' => ['path' => 'Transformers', 'generate' => false], - ], - ], - /* - |-------------------------------------------------------------------------- - | Scan Path - |-------------------------------------------------------------------------- - | - | Here you define which folder will be scanned. By default will scan vendor - | directory. This is useful if you host the package in packagist website. - | - */ - - 'scan' => [ - 'enabled' => false, - 'paths' => [ - base_path('vendor/*/*'), - ], - ], - /* - |-------------------------------------------------------------------------- - | Composer File Template - |-------------------------------------------------------------------------- - | - | Here is the config for composer.json file, generated by this package - | - */ - - 'composer' => [ - 'vendor' => 'nwidart', - 'author' => [ - 'name' => 'Nicolas Widart', - 'email' => 'n.widart@gmail.com', - ], - ], - /* - |-------------------------------------------------------------------------- - | Caching - |-------------------------------------------------------------------------- - | - | Here is the config for setting up caching feature. - | - */ - 'cache' => [ - 'enabled' => false, - 'key' => 'laravel-modules', - 'lifetime' => 60, - ], - /* - |-------------------------------------------------------------------------- - | Choose what laravel-modules will register as custom namespaces. - | Setting one to false will require you to register that part - | in your own Service Provider class. - |-------------------------------------------------------------------------- - */ - 'register' => [ - 'translations' => true, - /** - * load files on boot or register method - * - * Note: boot not compatible with asgardcms - * - * @example boot|register - */ - 'files' => 'register', - ], -]; diff --git a/config/themes.php b/config/themes.php index d6610d7e9..35ca67e60 100755 --- a/config/themes.php +++ b/config/themes.php @@ -23,5 +23,15 @@ return [ 'name' => 'Velocity', 'parent' => 'default' ], + ], + + 'admin-default' => 'default', + + 'admin-themes' => [ + 'default' => [ + 'views_path' => 'resources/admin-themes/default/views', + 'assets_path' => 'public/admin-themes/default/assets', + 'name' => 'Default' + ] ] ]; \ No newline at end of file diff --git a/packages/Webkul/Theme/src/ThemeViewFinder.php b/packages/Webkul/Theme/src/ThemeViewFinder.php index fada46559..c835e6e6e 100755 --- a/packages/Webkul/Theme/src/ThemeViewFinder.php +++ b/packages/Webkul/Theme/src/ThemeViewFinder.php @@ -4,6 +4,7 @@ namespace Webkul\Theme; use Webkul\Theme\Facades\Themes; use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Illuminate\View\FileViewFinder; class ThemeViewFinder extends FileViewFinder @@ -19,7 +20,7 @@ class ThemeViewFinder extends FileViewFinder // Extract the $view and the $namespace parts list($namespace, $view) = $this->parseNamespaceSegments($name); - if ($namespace != 'admin') { + if (! Str::contains(request()->route()->uri, 'admin/')) { $paths = $this->addThemeNamespacePaths($namespace); try { @@ -34,7 +35,23 @@ class ThemeViewFinder extends FileViewFinder return $this->findInPaths($view, $paths); } } else { - return $this->findInPaths($view, $this->hints[$namespace]); + $themes = app('themes'); + + $themes->set(config('themes.admin-default')); + + $paths = $this->addThemeNamespacePaths($namespace); + + try { + return $this->findInPaths($view, $paths); + } catch(\Exception $e) { + if ($namespace != 'admin') { + if (strpos($view, 'admin.') !== false) { + $view = str_replace('admin.', 'admin.' . Themes::current()->code . '.', $view); + } + } + + return $this->findInPaths($view, $paths); + } } } @@ -84,19 +101,6 @@ class ThemeViewFinder extends FileViewFinder } } - /** - * Get the string contents of the view. - * - * @param callable|null $callback - * @return array|string - * - * @throws \Throwable - */ - public function render(callable $callback = null) - { - dd(111); - } - /** * Set the array of paths where the views are being searched. * diff --git a/packages/Webkul/Theme/src/Themes.php b/packages/Webkul/Theme/src/Themes.php index 3a1ee1806..70dd273a3 100755 --- a/packages/Webkul/Theme/src/Themes.php +++ b/packages/Webkul/Theme/src/Themes.php @@ -3,6 +3,7 @@ namespace Webkul\Theme; use Illuminate\Support\Facades\Config; +use Illuminate\Support\Str; use Webkul\Theme\Theme; class Themes @@ -42,9 +43,15 @@ class Themes */ public function __construct() { - $this->laravelViewsPath = Config::get('view.paths'); + $routeURI = request()->route()->uri; - $this->defaultThemeCode = Config::get('themes.default', null); + if (Str::contains(request()->route()->uri, 'admin/')) { + $this->defaultThemeCode = Config::get('themes.admin-default', null); + } else { + $this->defaultThemeCode = Config::get('themes.default', null); + } + + $this->laravelViewsPath = Config::get('view.paths'); $this->loadThemes(); } @@ -85,7 +92,11 @@ class Themes { $parentThemes = []; - $themes = config('themes.themes', []); + if (Str::contains(request()->route()->uri, 'admin/')) { + $themes = config('themes.admin-themes', []); + } else { + $themes = config('themes.themes', []); + } foreach ($themes as $code => $data) { $this->themes[] = new Theme( @@ -140,6 +151,7 @@ class Themes Config::set('view.paths', $paths); $themeViewFinder = app('view.finder'); + $themeViewFinder->setPaths($paths); return $theme; From 37e7c4c8346f7caec8b7afff91b8955f6d10f37f Mon Sep 17 00:00:00 2001 From: jitendra Date: Mon, 10 Aug 2020 19:02:15 +0530 Subject: [PATCH 14/19] Merged with master --- .env.example | 1 + .env.testing | 1 + composer.json | 1 + composer.lock | 42 +- config/app.php | 12 + package.json | 2 +- packages/Webkul/API/composer.json | 2 +- packages/Webkul/Admin/composer.json | 2 +- packages/Webkul/Admin/src/Config/system.php | 6 +- .../Admin/src/DataGrids/CartRuleDataGrid.php | 6 + .../src/DataGrids/OrderInvoicesDataGrid.php | 29 +- .../Admin/src/DataGrids/ProductDataGrid.php | 28 +- .../Admin/src/DataGrids/SliderDataGrid.php | 6 + .../src/Database/Seeders/DatabaseSeeder.php | 4 +- .../Customer/CustomerController.php | 29 +- .../Http/Controllers/DashboardController.php | 2 + .../Controllers/Sales/InvoiceController.php | 30 +- .../src/Http/Requests/ConfigurationForm.php | 58 +- packages/Webkul/Admin/src/Http/routes.php | 8 +- packages/Webkul/Admin/src/Listeners/Order.php | 97 +- .../Admin/src/Listeners/PasswordChange.php | 31 + .../src/Mail/CancelOrderAdminNotification.php | 34 + .../src/Mail/OrderCommentNotification.php | 2 +- .../src/Providers/EventServiceProvider.php | 2 + .../Admin/src/Resources/lang/de/app.php | 8 + .../Admin/src/Resources/lang/en/app.php | 10 +- .../Admin/src/Resources/lang/es/app.php | 1315 +++++++++++++++++ .../Admin/src/Resources/lang/fa/app.php | 8 + .../Admin/src/Resources/lang/it/app.php | 8 + .../Admin/src/Resources/lang/nl/app.php | 8 + .../Admin/src/Resources/lang/pl/app.php | 8 + .../Admin/src/Resources/lang/pt_BR/app.php | 8 + .../Admin/src/Resources/lang/tr/app.php | 8 + .../views/catalog/attributes/create.blade.php | 7 +- .../views/catalog/attributes/edit.blade.php | 11 +- .../views/catalog/categories/create.blade.php | 2 +- .../views/catalog/categories/edit.blade.php | 2 +- .../views/catalog/families/create.blade.php | 2 +- .../views/catalog/families/edit.blade.php | 2 +- .../views/catalog/products/create.blade.php | 2 +- .../views/catalog/products/edit.blade.php | 2 +- .../products/field-types/text.blade.php | 2 +- .../views/catalog/products/index.blade.php | 33 - .../src/Resources/views/cms/create.blade.php | 2 +- .../src/Resources/views/cms/edit.blade.php | 2 +- .../views/configuration/field-type.blade.php | 11 +- .../customers/addresses/create.blade.php | 6 +- .../views/customers/addresses/edit.blade.php | 4 +- .../addresses/orders/index.blade.php | 2 +- .../customers/confirm-password.blade.php | 2 +- .../views/customers/create.blade.php | 2 +- .../Resources/views/customers/edit.blade.php | 6 +- .../views/customers/groups/create.blade.php | 4 +- .../views/customers/groups/edit.blade.php | 2 +- .../Resources/views/customers/note.blade.php | 2 +- .../views/customers/reviews/edit.blade.php | 2 +- .../customers/subscribers/edit.blade.php | 2 +- .../promotions/cart-rules/create.blade.php | 3 +- .../promotions/cart-rules/edit.blade.php | 3 +- .../promotions/cart-rules/index.blade.php | 32 - .../promotions/catalog-rules/create.blade.php | 7 +- .../promotions/catalog-rules/edit.blade.php | 5 +- .../views/sales/invoices/create.blade.php | 12 +- .../views/sales/invoices/index.blade.php | 5 +- .../views/sales/invoices/view.blade.php | 231 ++- .../views/sales/orders/view.blade.php | 70 +- .../views/sales/refunds/create.blade.php | 2 +- .../views/sales/refunds/view.blade.php | 60 +- .../views/sales/shipments/create.blade.php | 6 +- .../views/sales/shipments/view.blade.php | 4 +- .../views/settings/channels/create.blade.php | 2 +- .../views/settings/channels/edit.blade.php | 2 +- .../settings/currencies/create.blade.php | 2 +- .../views/settings/currencies/edit.blade.php | 2 +- .../settings/exchange_rates/create.blade.php | 2 +- .../settings/exchange_rates/edit.blade.php | 2 +- .../inventory_sources/create.blade.php | 2 +- .../settings/inventory_sources/edit.blade.php | 2 +- .../views/settings/locales/create.blade.php | 2 +- .../views/settings/locales/edit.blade.php | 2 +- .../views/settings/sliders/create.blade.php | 2 +- .../views/settings/sliders/edit.blade.php | 2 +- .../views/settings/sliders/index.blade.php | 35 - .../views/tax/tax-categories/create.blade.php | 2 +- .../views/tax/tax-categories/edit.blade.php | 2 +- .../views/tax/tax-rates/create.blade.php | 2 +- .../views/tax/tax-rates/edit.blade.php | 2 +- .../views/users/roles/create.blade.php | 2 +- .../views/users/roles/edit.blade.php | 2 +- .../views/users/users/create.blade.php | 4 +- .../views/users/users/edit.blade.php | 4 +- .../Http/Controllers/AttributeController.php | 4 +- .../Attribute/src/Models/AttributeOption.php | 2 +- packages/Webkul/BookingProduct/composer.json | 30 + .../BookingProductEventTicketFactory.php | 6 +- .../BookingProductEventTicketRepository.php | 20 +- .../BookingProduct/src/Type/Booking.php | 6 +- packages/Webkul/CartRule/composer.json | 28 + .../Webkul/CartRule/src/Helpers/CartRule.php | 126 +- .../Webkul/CartRule/src/Models/CartRule.php | 60 +- packages/Webkul/CatalogRule/composer.json | 28 + packages/Webkul/Checkout/composer.json | 2 +- packages/Webkul/Checkout/src/Cart.php | 34 +- .../Core/src/Helpers/Laravel5Helper.php | 52 +- .../Http/Controllers/CustomerController.php | 8 +- .../Notifications/CustomerUpdatePassword.php | 43 + .../src/Repositories/CustomerRepository.php | 32 + packages/Webkul/Inventory/composer.json | 2 +- packages/Webkul/Paypal/composer.json | 25 + packages/Webkul/Paypal/src/Helpers/Ipn.php | 4 +- .../src/Database/Factories/ProductFactory.php | 8 +- .../Product/src/Helpers/BundleOption.php | 7 +- .../Webkul/Product/src/Helpers/Toolbar.php | 25 +- .../Http/Controllers/ProductController.php | 28 +- .../Product/src/Listeners/ProductFlat.php | 5 +- .../Repositories/ProductFlatRepository.php | 18 + .../src/Repositories/ProductRepository.php | 65 +- .../Webkul/Product/src/Type/AbstractType.php | 5 +- packages/Webkul/Product/src/Type/Bundle.php | 78 +- .../Webkul/Product/src/Type/Configurable.php | 17 +- packages/Webkul/Product/src/Type/Grouped.php | 30 +- packages/Webkul/Rule/composer.json | 26 + packages/Webkul/Sales/src/Models/Order.php | 6 + .../src/Repositories/InvoiceRepository.php | 19 +- packages/Webkul/Shipping/src/Shipping.php | 9 +- packages/Webkul/Shop/.gitrepo | 11 + .../Shop/publishable/assets/css/shop.css | 2 +- .../Webkul/Shop/publishable/assets/js/shop.js | 2 +- .../Shop/publishable/assets/mix-manifest.json | 4 +- .../Shop/src/Resources/assets/sass/app.scss | 63 +- .../Webkul/Shop/src/Resources/lang/ar/app.php | 30 + .../Webkul/Shop/src/Resources/lang/de/app.php | 30 + .../Webkul/Shop/src/Resources/lang/en/app.php | 33 +- .../Webkul/Shop/src/Resources/lang/es/app.php | 29 + .../Webkul/Shop/src/Resources/lang/fa/app.php | 30 + .../Webkul/Shop/src/Resources/lang/it/app.php | 23 +- .../Webkul/Shop/src/Resources/lang/ja/app.php | 33 +- .../Webkul/Shop/src/Resources/lang/nl/app.php | 32 +- .../Webkul/Shop/src/Resources/lang/pl/app.php | 28 + .../Shop/src/Resources/lang/pt_BR/app.php | 30 + .../Webkul/Shop/src/Resources/lang/tr/app.php | 25 +- .../customers/account/orders/view.blade.php | 10 +- .../emails/admin/update-password.blade.php | 25 + .../emails/customer/update-password.blade.php | 21 + .../emails/sales/order-cancel-admin.blade.php | 212 +++ .../guest/compare/compare-products.blade.php | 136 +- .../views/products/compare.blade.php | 6 +- .../Resources/views/products/index.blade.php | 4 +- .../Resources/views/products/review.blade.php | 16 +- .../views/products/reviews/index.blade.php | 16 +- .../products/view/grouped-products.blade.php | 30 +- .../views/products/view/reviews.blade.php | 14 +- .../views/products/wishlist.blade.php | 2 + packages/Webkul/SocialLogin/composer.json | 26 + .../CustomerSocialAccountTableSeeder.php | 70 + .../src/Database/Seeders/DatabaseSeeder.php | 18 + packages/Webkul/Theme/composer.json | 2 +- .../Webkul/Ui/publishable/assets/css/ui.css | 2 +- .../assets/images/Star-Icon-Blank.svg | 10 + .../Webkul/Ui/publishable/assets/js/ui.js | 2 +- .../Ui/publishable/assets/js/ui.js.LICENSE | 24 - .../publishable/assets/js/ui.js.LICENSE.txt | 25 + .../Ui/publishable/assets/mix-manifest.json | 4 +- packages/Webkul/Ui/src/DataGrid/DataGrid.php | 163 +- .../assets/images/Star-Icon-Blank.svg | 10 + .../src/Resources/assets/sass/components.scss | 4 +- .../Ui/src/Resources/assets/sass/icons.scss | 8 +- .../Webkul/Ui/src/Resources/lang/pl/app.php | 4 +- .../Resources/views/datagrid/body.blade.php | 8 +- .../views/datagrid/pagination.blade.php | 2 +- .../partials/default-header.blade.php | 2 +- .../Resources/views/datagrid/table.blade.php | 502 ++++--- .../Http/Controllers/AccountController.php | 9 +- .../src/Http/Controllers/UserController.php | 13 +- .../src/Notifications/AdminUpdatePassword.php | 43 + .../publishable/assets/css/velocity.css | 2 +- .../publishable/assets/js/velocity.js | 2 +- .../publishable/assets/mix-manifest.json | 4 +- .../src/DataGrids/ContentDataGrid.php | 2 +- ...content_count_velocity_meta_data_table.php | 32 + .../Seeders/VelocityMetaDataSeeder.php | 1 + .../Webkul/Velocity/src/Helpers/Helper.php | 5 +- .../Admin/ConfigurationController.php | 2 +- .../Controllers/Admin/ContentController.php | 4 +- .../Controllers/Shop/ComparisonController.php | 11 +- .../Webkul/Velocity/src/Http/admin-routes.php | 2 +- .../src/Repositories/ContentRepository.php | 9 +- .../assets/js/UI/components/add-to-cart.vue | 2 +- .../assets/js/UI/components/product-card.vue | 14 +- .../js/UI/components/product-compare.vue | 7 +- .../assets/js/UI/components/wishlist.vue | 3 + .../Velocity/src/Resources/assets/js/app.js | 1 - .../Resources/assets/sass/components/app.scss | 7 +- .../assets/sass/components/media.scss | 77 +- .../Resources/assets/sass/components/rtl.scss | 31 + .../assets/sass/components/shared.scss | 3 +- .../Velocity/src/Resources/lang/ar/app.php | 7 +- .../Velocity/src/Resources/lang/de/app.php | 5 + .../Velocity/src/Resources/lang/en/app.php | 47 +- .../Velocity/src/Resources/lang/fa/app.php | 9 +- .../Velocity/src/Resources/lang/it/app.php | 5 + .../Velocity/src/Resources/lang/ja/app.php | 299 ++++ .../Velocity/src/Resources/lang/nl/app.php | 7 +- .../Velocity/src/Resources/lang/pl/app.php | 5 + .../Velocity/src/Resources/lang/pt_BR/app.php | 5 + .../Velocity/src/Resources/lang/tr/app.php | 5 + .../views/admin/category/create.blade.php | 19 +- .../views/admin/category/edit.blade.php | 19 +- .../content/content-type/category.blade.php | 3 +- .../views/admin/content/create.blade.php | 2 +- .../views/admin/content/edit.blade.php | 2 +- .../views/admin/meta-info/meta-data.blade.php | 33 +- .../Resources/views/shop/UI/header.blade.php | 31 +- .../views/shop/UI/particals.blade.php | 2 +- .../onepage/customer-new-form.blade.php | 2 +- .../customers/account/address/index.blade.php | 19 +- .../customers/account/orders/view.blade.php | 3 + .../guest/compare/compare-products.blade.php | 126 +- .../views/shop/products/add-to-cart.blade.php | 1 + .../views/shop/products/list/card.blade.php | 33 +- .../shop/products/list/toolbar.blade.php | 68 +- .../views/shop/products/view.blade.php | 2 +- .../shop/products/view/attributes.blade.php | 4 +- .../shop/products/view/cross-sells.blade.php | 4 +- .../shop/products/view/gallery.blade.php | 22 + .../products/view/grouped-products.blade.php | 30 +- .../shop/products/view/reviews.blade.php | 6 +- .../views/shop/products/wishlist.blade.php | 4 +- .../views/shop/search/search.blade.php | 52 +- tests/_support/FunctionalTester.php | 9 + tests/acceptance/GuestCheckoutCest.php | 13 +- tests/functional/Checkout/Cart/CartCest.php | 13 +- tests/functional/Customer/CustomerCest.php | 10 +- tests/functional/Shop/GuestCheckoutCest.php | 14 +- 234 files changed, 5049 insertions(+), 1267 deletions(-) create mode 100644 packages/Webkul/Admin/src/Listeners/PasswordChange.php create mode 100644 packages/Webkul/Admin/src/Mail/CancelOrderAdminNotification.php create mode 100644 packages/Webkul/Admin/src/Resources/lang/es/app.php create mode 100755 packages/Webkul/BookingProduct/composer.json create mode 100755 packages/Webkul/CartRule/composer.json create mode 100755 packages/Webkul/CatalogRule/composer.json create mode 100644 packages/Webkul/Customer/src/Notifications/CustomerUpdatePassword.php create mode 100755 packages/Webkul/Paypal/composer.json create mode 100755 packages/Webkul/Rule/composer.json create mode 100644 packages/Webkul/Shop/.gitrepo create mode 100755 packages/Webkul/Shop/src/Resources/views/emails/admin/update-password.blade.php create mode 100755 packages/Webkul/Shop/src/Resources/views/emails/customer/update-password.blade.php create mode 100644 packages/Webkul/Shop/src/Resources/views/emails/sales/order-cancel-admin.blade.php create mode 100755 packages/Webkul/SocialLogin/composer.json create mode 100644 packages/Webkul/SocialLogin/src/Database/Seeders/CustomerSocialAccountTableSeeder.php create mode 100644 packages/Webkul/SocialLogin/src/Database/Seeders/DatabaseSeeder.php create mode 100644 packages/Webkul/Ui/publishable/assets/images/Star-Icon-Blank.svg delete mode 100644 packages/Webkul/Ui/publishable/assets/js/ui.js.LICENSE create mode 100644 packages/Webkul/Ui/src/Resources/assets/images/Star-Icon-Blank.svg create mode 100644 packages/Webkul/User/src/Notifications/AdminUpdatePassword.php create mode 100644 packages/Webkul/Velocity/src/Database/Migrations/2020_08_01_132239_add_header_content_count_velocity_meta_data_table.php create mode 100644 packages/Webkul/Velocity/src/Resources/lang/ja/app.php diff --git a/.env.example b/.env.example index c12561de2..bfb76ce72 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,7 @@ APP_VERSION=1.1.2 APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_ADMIN_URL=admin APP_TIMEZONE=Asia/Kolkata APP_LOCALE=en LOG_CHANNEL=stack diff --git a/.env.testing b/.env.testing index f872c6bfe..845e4d42e 100644 --- a/.env.testing +++ b/.env.testing @@ -4,6 +4,7 @@ APP_VERSION=1.1.2 APP_KEY=base64:G4KY3tUsTaY9ONo1n/QyJvVLQZdJDgbIkSJswFK01HE= APP_DEBUG=true APP_URL=http://localhost +APP_ADMIN_URL=admin LOG_CHANNEL=stack diff --git a/composer.json b/composer.json index a689929d3..fa1f6435e 100755 --- a/composer.json +++ b/composer.json @@ -20,6 +20,7 @@ "algolia/algoliasearch-client-php": "^2.2", "astrotomic/laravel-translatable": "^11.0.0", "babenkoivan/elastic-scout-driver": "^1.1", + "bagistobrasil/bagisto-product-social-share": "^0.1.2", "barryvdh/laravel-debugbar": "^3.1", "barryvdh/laravel-dompdf": "0.8.6", "doctrine/dbal": "2.9.2", diff --git a/composer.lock b/composer.lock index 228bcf12f..3c867c0e3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fdf74de7a5b3178ce60852ca512a6f21", + "content-hash": "3332479a65fc6c67057c2946a27fe95e", "packages": [ { "name": "algolia/algoliasearch-client-php", @@ -302,6 +302,46 @@ ], "time": "2020-06-22T14:14:32+00:00" }, + { + "name": "bagistobrasil/bagisto-product-social-share", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/bagistobrasil/bagisto-product-social-share.git", + "reference": "a81c4f29a3e79ce911a9e419cc83ccf513c0ab38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bagistobrasil/bagisto-product-social-share/zipball/a81c4f29a3e79ce911a9e419cc83ccf513c0ab38", + "reference": "a81c4f29a3e79ce911a9e419cc83ccf513c0ab38", + "shasum": "" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BagistoBrasil\\ProductSocialShare\\Providers\\ProductSocialShareProvider" + ], + "aliases": [] + } + }, + "autoload": { + "psr-4": { + "BagistoBrasil\\ProductSocialShare\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carlos Gartner", + "email": "contato@carlosgartner.com.br" + } + ], + "time": "2020-08-04T12:36:28+00:00" + }, { "name": "barryvdh/laravel-debugbar", "version": "v3.3.3", diff --git a/config/app.php b/config/app.php index 83a642e1d..40f4c99bc 100755 --- a/config/app.php +++ b/config/app.php @@ -54,6 +54,18 @@ return [ 'url' => env('APP_URL', 'http://localhost'), + /* + |-------------------------------------------------------------------------- + | Application Admin URL + |-------------------------------------------------------------------------- + | + | This URL suffix is used to define the admin url for example + | admin/ or backend/ + | + */ + + 'admin_url' => env('APP_ADMIN_URL', 'admin'), + /* |-------------------------------------------------------------------------- | Application Timezone diff --git a/package.json b/package.json index cf99f33f7..ea372d68a 100755 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "cross-env": "^5.1", "jquery": "^3.2", "laravel-mix": "^5.0.1", - "lodash": "^4.17.4", + "lodash": "^4.17.19", "popper.js": "^1.12", "resolve-url-loader": "^3.1.0", "sass": "^1.24.5", diff --git a/packages/Webkul/API/composer.json b/packages/Webkul/API/composer.json index 125847a58..c86d16a7c 100755 --- a/packages/Webkul/API/composer.json +++ b/packages/Webkul/API/composer.json @@ -25,7 +25,7 @@ "extra": { "laravel": { "providers": [ - "Webkul\\API\\AdminServiceProvider" + "Webkul\\API\\Providers\\APIServiceProvider" ], "aliases": {} } diff --git a/packages/Webkul/Admin/composer.json b/packages/Webkul/Admin/composer.json index dd550b7b6..c2cb2851d 100755 --- a/packages/Webkul/Admin/composer.json +++ b/packages/Webkul/Admin/composer.json @@ -20,7 +20,7 @@ "extra": { "laravel": { "providers": [ - "Webkul\\Admin\\AdminServiceProvider" + "Webkul\\Admin\\Providers\\AdminServiceProvider" ], "aliases": {} } diff --git a/packages/Webkul/Admin/src/Config/system.php b/packages/Webkul/Admin/src/Config/system.php index efad8bd08..419e79d55 100644 --- a/packages/Webkul/Admin/src/Config/system.php +++ b/packages/Webkul/Admin/src/Config/system.php @@ -27,7 +27,7 @@ return [ 'value' => 'kgs', ], ], - 'channel_based' => true, + 'channel_based' => true ], ], ], [ @@ -41,24 +41,28 @@ return [ 'type' => 'text', 'validation' => 'required|max:50', 'channel_based' => true, + 'default_value' => config('mail.from.name'), ], [ 'name' => 'shop_email_from', 'title' => 'admin::app.admin.system.shop-email-from', 'type' => 'text', 'validation' => 'required|email', 'channel_based' => true, + 'default_value' => config('mail.from.address'), ], [ 'name' => 'admin_name', 'title' => 'admin::app.admin.system.admin-name', 'type' => 'text', 'validation' => 'required|max:50', 'channel_based' => true, + 'default_value' => config('mail.admin.name'), ], [ 'name' => 'admin_email', 'title' => 'admin::app.admin.system.admin-email', 'type' => 'text', 'validation' => 'required|email', 'channel_based' => true, + 'default_value' => config('mail.admin.address'), ], ], ], [ diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php index 830591f6b..a2a7cc12d 100644 --- a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php @@ -15,6 +15,12 @@ class CartRuleDataGrid extends DataGrid protected $channel = 'all'; + /** @var string[] contains the keys for which extra filters to show */ + protected $extraFilters = [ + 'channels', + 'customer_groups', + ]; + public function __construct() { parent::__construct(); diff --git a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php index 11b545ef7..0570987c3 100755 --- a/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/OrderInvoicesDataGrid.php @@ -45,6 +45,19 @@ class OrderInvoicesDataGrid extends DataGrid 'filterable' => true, ]); + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.invoice-date'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + 'closure' => true, + 'wrapper' => function ($value) { + return \Carbon\Carbon::parse($value->created_at)->format('d-m-Y'); + } + ]); + $this->addColumn([ 'index' => 'base_grand_total', 'label' => trans('admin::app.datagrid.grand-total'), @@ -55,12 +68,22 @@ class OrderInvoicesDataGrid extends DataGrid ]); $this->addColumn([ - 'index' => 'created_at', - 'label' => trans('admin::app.datagrid.invoice-date'), - 'type' => 'datetime', + 'index' => 'state', + 'label' => trans('admin::app.datagrid.state'), + 'type' => 'string', + 'closure' => true, 'searchable' => true, 'sortable' => true, 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->state == 'paid') { + return ''. trans('admin::app.sales.orders.invoice-status-paid') .''; + } elseif ($value->state == "pending") { + return ''. trans('admin::app.sales.orders.invoice-status-pending') .''; + } elseif ($value->state == "overdue") { + return ''. trans('admin::app.sales.orders.invoice-status-overdue') . ''; + } + } ]); } diff --git a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php index 434020623..c46bdf271 100644 --- a/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/ProductDataGrid.php @@ -4,6 +4,7 @@ namespace Webkul\Admin\DataGrids; use Webkul\Ui\DataGrid\DataGrid; use Illuminate\Support\Facades\DB; +use Webkul\Core\Models\Channel; class ProductDataGrid extends DataGrid { @@ -17,22 +18,39 @@ class ProductDataGrid extends DataGrid protected $channel = 'all'; + /** @var string[] contains the keys for which extra filters to render */ + protected $extraFilters = [ + 'channels', + 'locales', + ]; + public function __construct() { parent::__construct(); + /* locale */ $this->locale = request()->get('locale') ?? 'all'; + /* channel */ $this->channel = request()->get('channel') ?? 'all'; + + /* finding channel name */ + if ($this->channel !== 'all') { + $this->channel = Channel::find($this->channel); + $this->channel = $this->channel ? $this->channel->code : 'all'; + } } public function prepareQueryBuilder() { + /* query builder */ $queryBuilder = DB::table('product_flat') ->leftJoin('products', 'product_flat.product_id', '=', 'products.id') ->leftJoin('attribute_families', 'products.attribute_family_id', '=', 'attribute_families.id') ->leftJoin('product_inventories', 'product_flat.product_id', '=', 'product_inventories.product_id') ->select( + 'product_flat.locale', + 'product_flat.channel', 'product_flat.product_id as product_id', 'products.sku as product_sku', 'product_flat.name as product_name', @@ -44,18 +62,16 @@ class ProductDataGrid extends DataGrid ); if ($this->locale !== 'all') { - $queryBuilder->where('locale', $this->locale); + $queryBuilder->where('product_flat.locale', $this->locale); } if ($this->channel !== 'all') { - $queryBuilder->where('channel', $this->channel); - } - - if ($currentLocale = app()->getLocale()) { - $queryBuilder->where('product_flat.locale', $currentLocale); + $queryBuilder->where('product_flat.channel', $this->channel); } $queryBuilder->groupBy('product_flat.product_id'); + $queryBuilder->having('locale', $this->locale !== 'all' ? $this->locale : 'en'); + $queryBuilder->having('channel', $this->channel !== 'all' ? $this->channel : 'default'); $this->addFilter('product_id', 'product_flat.product_id'); $this->addFilter('product_name', 'product_flat.name'); diff --git a/packages/Webkul/Admin/src/DataGrids/SliderDataGrid.php b/packages/Webkul/Admin/src/DataGrids/SliderDataGrid.php index 6d5b6009a..6e47b373e 100755 --- a/packages/Webkul/Admin/src/DataGrids/SliderDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/SliderDataGrid.php @@ -15,6 +15,12 @@ class SliderDataGrid extends DataGrid protected $channel = 'all'; + /** @var string[] contains the keys for which extra filters to render */ + protected $extraFilters = [ + 'channels', + 'locales', + ]; + public function __construct() { parent::__construct(); diff --git a/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php index dbdaed761..74e764713 100755 --- a/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php +++ b/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php @@ -10,6 +10,7 @@ use Webkul\User\Database\Seeders\DatabaseSeeder as UserSeeder; use Webkul\Customer\Database\Seeders\DatabaseSeeder as CustomerSeeder; use Webkul\Inventory\Database\Seeders\DatabaseSeeder as InventorySeeder; use Webkul\CMS\Database\Seeders\DatabaseSeeder as CMSSeeder; +use Webkul\SocialLogin\Database\Seeders\DatabaseSeeder as SocialLoginSeeder; class DatabaseSeeder extends Seeder { @@ -27,5 +28,6 @@ class DatabaseSeeder extends Seeder $this->call(UserSeeder::class); $this->call(CustomerSeeder::class); $this->call(CMSSeeder::class); + $this->call(SocialLoginSeeder::class); } -} \ No newline at end of file +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php index 18ec38400..4c4de66c7 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerController.php @@ -64,12 +64,12 @@ class CustomerController extends Controller CustomerGroupRepository $customerGroupRepository, ChannelRepository $channelRepository ) - + { $this->_config = request('_config'); $this->middleware('admin'); $this->customerRepository = $customerRepository; - + $this->customerAddressRepository = $customerAddressRepository; $this->customerGroupRepository = $customerGroupRepository; $this->channelRepository = $channelRepository; @@ -200,12 +200,19 @@ class CustomerController extends Controller $customer = $this->customerRepository->findorFail($id); try { - $this->customerRepository->delete($id); + + if (! $this->customerRepository->checkIfCustomerHasOrderPendingOrProcessing($customer)) { + + $this->customerRepository->delete($id); + } else { + + return response()->json(['message' => false], 400); + } session()->flash('success', trans('admin::app.response.delete-success', ['name' => 'Customer'])); - return response()->json(['message' => true], 200); } catch (\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Customer'])); } @@ -279,12 +286,18 @@ class CustomerController extends Controller { $customerIds = explode(',', request()->input('indexes')); - foreach ($customerIds as $customerId) { - $this->customerRepository->deleteWhere(['id' => $customerId]); + if (!$this->customerRepository->checkBulkCustomerIfTheyHaveOrderPendingOrProcessing($customerIds)) { + + foreach ($customerIds as $customerId) { + $this->customerRepository->deleteWhere(['id' => $customerId]); + } + + session()->flash('success', trans('admin::app.customers.customers.mass-destroy-success')); + + return redirect()->back(); } - session()->flash('success', trans('admin::app.customers.customers.mass-destroy-success')); - + session()->flash('error', trans('admin::app.response.order-pending', ['name' => 'Customers'])); return redirect()->back(); } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/DashboardController.php b/packages/Webkul/Admin/src/Http/Controllers/DashboardController.php index 70717e83c..7a9415c33 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/DashboardController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/DashboardController.php @@ -241,6 +241,8 @@ class DashboardController extends Controller ->addSelect('id', 'customer_id', 'customer_email', 'customer_first_name', 'customer_last_name') ->where('orders.created_at', '>=', $this->startDate) ->where('orders.created_at', '<=', $this->endDate) + ->where('orders.status', '<>', 'closed') + ->where('orders.status', '<>', 'canceled') ->groupBy('customer_email') ->orderBy('total_base_grand_total', 'DESC') ->limit(5) diff --git a/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php b/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php index 3931fc268..2d346bf2a 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Sales/InvoiceController.php @@ -2,9 +2,12 @@ namespace Webkul\Admin\Http\Controllers\Sales; +use Illuminate\Http\Request; + use Webkul\Admin\Http\Controllers\Controller; use Webkul\Sales\Repositories\OrderRepository; use Webkul\Sales\Repositories\InvoiceRepository; + use PDF; class InvoiceController extends Controller @@ -97,7 +100,7 @@ class InvoiceController extends Controller $data = request()->all(); $haveProductToInvoice = false; - + foreach ($data['invoice']['items'] as $itemId => $qty) { if ($qty) { $haveProductToInvoice = true; @@ -145,4 +148,29 @@ class InvoiceController extends Controller return $pdf->download('invoice-' . $invoice->created_at->format('d-m-Y') . '.pdf'); } + + /** + * Update the invoice state. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function updateState($id, Request $request) + { + $invoice = $this->invoiceRepository->findOrFail($id); + $task = $this->invoiceRepository->updateInvoiceState($invoice, $request->state); + + if($request->state == 'paid'){ + $order = $this->orderRepository->findOrFail($invoice->order->id); + $this->orderRepository->updateOrderStatus($order); + } + + if ($task){ + session()->flash('success', trans('admin::app.sales.orders.invoice-status-confirmed')); + } else { + session()->flash('success', trans('admin::app.sales.orders.invoice-status-error')); + } + + return back(); + } } diff --git a/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php b/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php index 4611ad6b5..6e479db8a 100644 --- a/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php +++ b/packages/Webkul/Admin/src/Http/Requests/ConfigurationForm.php @@ -3,10 +3,30 @@ namespace Webkul\Admin\Http\Requests; use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Validation\Rule; +use Illuminate\Validation\Factory as ValidationFactory; class ConfigurationForm extends FormRequest { + /* + Added custom validator. + */ + public function __construct(ValidationFactory $validationFactory) + { + /* added custom comma seperated integer validator */ + $validationFactory->extend( + 'comma_seperated_integer', + function ($attribute, $value, $parameters) { + $pages = explode(',', $value); + foreach($pages as $page){ + if (! is_numeric($page)) { + return false; + } + } + return true; + } + ); + } + /** * Determine if the Configuraion is authorized to make this request. * @@ -26,12 +46,28 @@ class ConfigurationForm extends FormRequest { $this->rules = []; + if (request()->has('catalog.products.storefront.products_per_page') + && ! empty(request()->input('catalog.products.storefront.products_per_page')) + ) { + $this->rules = [ + 'catalog.products.storefront.products_per_page' => 'comma_seperated_integer', + ]; + } + if (request()->has('general.design.admin_logo.logo_image') && ! request()->input('general.design.admin_logo.logo_image.delete') ) { - $this->rules = [ - 'general.design.admin_logo.logo_image' => 'required|mimes:jpeg,bmp,png,jpg', - ]; + $this->rules = array_merge($this->rules, [ + 'general.design.admin_logo.logo_image' => 'required|mimes:jpeg,bmp,png,jpg|max:5000', + ]); + } + + if (request()->has('general.design.admin_logo.favicon') + && ! request()->input('general.design.admin_logo.favicon.delete') + ) { + $this->rules = array_merge($this->rules, [ + 'general.design.admin_logo.favicon' => 'required|mimes:jpeg,bmp,png,jpg|max:5000', + ]); } return $this->rules; @@ -46,6 +82,18 @@ class ConfigurationForm extends FormRequest { return [ 'general.design.admin_logo.logo_image.mimes' => 'Invalid file format. Use only jpeg, bmp, png, jpg.', + 'catalog.products.storefront.products_per_page.comma_seperated_integer' => 'The "Product Per Page" field must be numeric and may contain comma.' ]; } -} + + /** + * Set the attribute name. + */ + public function attributes() + { + return [ + 'general.design.admin_logo.logo_image' => 'Logo Image', + 'general.design.admin_logo.favicon' => 'Favicon Image' + ]; + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index f9fa5a75b..07ab2fc32 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -1,7 +1,7 @@ ['web']], function () { - Route::prefix('admin')->group(function () { + Route::prefix(config('app.admin_url'))->group(function () { Route::get('/', 'Webkul\Admin\Http\Controllers\Controller@redirectToLogin'); @@ -211,6 +211,10 @@ Route::group(['middleware' => ['web']], function () { 'view' => 'admin::sales.invoices.print', ])->name('admin.sales.invoices.print'); + Route::post('/invoices/update/state/{order_id}', 'Webkul\Admin\Http\Controllers\Sales\InvoiceController@updateState')->defaults('_config', [ + 'redirect' => 'admin.sales.orders.view', + ])->name('admin.sales.invoices.update.state'); + // Sales Shipments Routes Route::get('/shipments', 'Webkul\Admin\Http\Controllers\Sales\ShipmentController@index')->defaults('_config', [ @@ -673,7 +677,7 @@ Route::group(['middleware' => ['web']], function () { //tax rate ends //DataGrid Export - Route::post('admin/export', 'Webkul\Admin\Http\Controllers\ExportController@export')->name('admin.datagrid.export'); + Route::post(config('app.admin_url') . '/export', 'Webkul\Admin\Http\Controllers\ExportController@export')->name('admin.datagrid.export'); Route::prefix('promotions')->group(function () { Route::get('cart-rules', 'Webkul\CartRule\Http\Controllers\CartRuleController@index')->defaults('_config', [ diff --git a/packages/Webkul/Admin/src/Listeners/Order.php b/packages/Webkul/Admin/src/Listeners/Order.php index 95398c5b0..887c0a4c2 100755 --- a/packages/Webkul/Admin/src/Listeners/Order.php +++ b/packages/Webkul/Admin/src/Listeners/Order.php @@ -3,36 +3,39 @@ namespace Webkul\Admin\Listeners; use Illuminate\Support\Facades\Mail; -use Webkul\Admin\Mail\NewOrderNotification; use Webkul\Admin\Mail\NewAdminNotification; -use Webkul\Admin\Mail\NewInvoiceNotification; -use Webkul\Admin\Mail\NewShipmentNotification; -use Webkul\Admin\Mail\NewInventorySourceNotification; -use Webkul\Admin\Mail\CancelOrderNotification; +use Webkul\Admin\Mail\NewOrderNotification; use Webkul\Admin\Mail\NewRefundNotification; +use Webkul\Admin\Mail\NewInvoiceNotification; +use Webkul\Admin\Mail\CancelOrderNotification; +use Webkul\Admin\Mail\NewShipmentNotification; use Webkul\Admin\Mail\OrderCommentNotification; +use Webkul\Admin\Mail\CancelOrderAdminNotification; +use Webkul\Admin\Mail\NewInventorySourceNotification; class Order { /** * Send new order Mail to the customer and admin - * + * * @param \Webkul\Sales\Contracts\Order $order * @return void */ public function sendNewOrderMail($order) { - try { - $configKey = 'emails.general.notifications.emails.general.notifications.new-order'; + $customerLocale = $this->getLocale($order); + try { + /* email to customer */ + $configKey = 'emails.general.notifications.emails.general.notifications.new-order'; if (core()->getConfigData($configKey)) { - Mail::queue(new NewOrderNotification($order)); + $this->prepareMail($customerLocale, new NewOrderNotification($order)); } + /* email to admin */ $configKey = 'emails.general.notifications.emails.general.notifications.new-admin'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewAdminNotification($order)); + $this->prepareMail(env('APP_LOCALE'), new NewAdminNotification($order)); } } catch (\Exception $e) { report($e); @@ -41,21 +44,23 @@ class Order /** * Send new invoice mail to the customer - * + * * @param \Webkul\Sales\Contracts\Invoice $invoice * @return void */ public function sendNewInvoiceMail($invoice) { + $customerLocale = $this->getLocale($invoice); + try { if ($invoice->email_sent) { return; } + /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.new-invoice'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewInvoiceNotification($invoice)); + $this->prepareMail($customerLocale, new NewInvoiceNotification($invoice)); } } catch (\Exception $e) { report($e); @@ -64,17 +69,19 @@ class Order /** * Send new refund mail to the customer - * + * * @param \Webkul\Sales\Contracts\Refund $refund * @return void */ public function sendNewRefundMail($refund) { - try { - $configKey = 'emails.general.notifications.emails.general.notifications.new-refund'; + $customerLocale = $this->getLocale($refund); + try { + /* email to customer */ + $configKey = 'emails.general.notifications.emails.general.notifications.new-refund'; if (core()->getConfigData($configKey)) { - Mail::queue(new NewRefundNotification($refund)); + $this->prepareMail($customerLocale, new NewRefundNotification($refund)); } } catch (\Exception $e) { report($e); @@ -83,27 +90,29 @@ class Order /** * Send new shipment mail to the customer - * + * * @param \Webkul\Sales\Contracts\Shipment $shipment * @return void */ public function sendNewShipmentMail($shipment) { + $customerLocale = $this->getLocale($shipment); + try { if ($shipment->email_sent) { return; } + /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.new-shipment'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewShipmentNotification($shipment)); + $this->prepareMail($customerLocale, new NewShipmentNotification($shipment)); } + /* email to admin */ $configKey = 'emails.general.notifications.emails.general.notifications.new-inventory-source'; - if (core()->getConfigData($configKey)) { - Mail::queue(new NewInventorySourceNotification($shipment)); + $this->prepareMail(env('APP_LOCALE'), new NewInventorySourceNotification($shipment)); } } catch (\Exception $e) { report($e); @@ -116,10 +125,19 @@ class Order */ public function sendCancelOrderMail($order) { + $customerLocale = $this->getLocale($order); + try { + /* email to customer */ $configKey = 'emails.general.notifications.emails.general.notifications.cancel-order'; if (core()->getConfigData($configKey)) { - Mail::queue(new CancelOrderNotification($order)); + $this->prepareMail($customerLocale, new CancelOrderNotification($order)); + } + + /* email to admin */ + $configKey = 'emails.general.notifications.emails.general.notifications.new-admin'; + if (core()->getConfigData($configKey)) { + $this->prepareMail(env('APP_LOCALE'), new CancelOrderAdminNotification($order)); } } catch (\Exception $e) { report($e); @@ -132,14 +150,43 @@ class Order */ public function sendOrderCommentMail($comment) { + $customerLocale = $this->getLocale($comment); + if (! $comment->customer_notified) { return; } try { - Mail::queue(new OrderCommentNotification($comment)); + /* email to customer */ + $this->prepareMail($customerLocale, new OrderCommentNotification($comment)); } catch (\Exception $e) { report($e); } } + + /** + * Get the locale of the customer if somehow item name changes then the english locale will pe provided. + * + * @param object \Webkul\Sales\Contracts\Order|\Webkul\Sales\Contracts\Invoice|\Webkul\Sales\Contracts\Refund|\Webkul\Sales\Contracts\Shipment|\Webkul\Sales\Contracts\OrderComment + * @return string + */ + private function getLocale($object) + { + if ($object instanceof \Webkul\Sales\Contracts\OrderComment) { + $object = $object->order; + } + + $objectFirstItem = $object->items->first(); + return isset($objectFirstItem->additional['locale']) ? $objectFirstItem->additional['locale'] : 'en'; + } + + /** + * Prepare Mail. + * @return void + */ + private function prepareMail($locale, $notification) + { + app()->setLocale($locale); + Mail::queue($notification); + } } \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Listeners/PasswordChange.php b/packages/Webkul/Admin/src/Listeners/PasswordChange.php new file mode 100644 index 000000000..88fedf523 --- /dev/null +++ b/packages/Webkul/Admin/src/Listeners/PasswordChange.php @@ -0,0 +1,31 @@ +order = $order; + } + + public function build() + { + return $this->from(core()->getSenderEmailDetails()['email'], core()->getSenderEmailDetails()['name']) + ->to(core()->getAdminEmailDetails()['email']) + ->subject(trans('shop::app.mail.order.cancel.subject')) + ->view('shop::emails.sales.order-cancel-admin'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Mail/OrderCommentNotification.php b/packages/Webkul/Admin/src/Mail/OrderCommentNotification.php index c76361e7c..09ffdaa16 100644 --- a/packages/Webkul/Admin/src/Mail/OrderCommentNotification.php +++ b/packages/Webkul/Admin/src/Mail/OrderCommentNotification.php @@ -38,7 +38,7 @@ class OrderCommentNotification extends Mailable { return $this->from(core()->getSenderEmailDetails()['email'], core()->getSenderEmailDetails()['name']) ->to($this->comment->order->customer_email, $this->comment->order->customer_full_name) - ->subject(trans('shop::app.mail.order.comment.subject')) + ->subject(trans('shop::app.mail.order.comment.subject', ['order_id' => $this->comment->order->increment_id])) ->view('shop::emails.sales.new-order-comment'); } } diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php index cb38d77c1..f40932b14 100755 --- a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php @@ -14,6 +14,8 @@ class EventServiceProvider extends ServiceProvider */ public function boot() { + Event::listen('user.admin.update-password', 'Webkul\Admin\Listeners\PasswordChange@sendUpdatePasswordMail'); + Event::listen('checkout.order.save.after', 'Webkul\Admin\Listeners\Order@sendNewOrderMail'); Event::listen('sales.invoice.save.after', 'Webkul\Admin\Listeners\Order@sendNewInvoiceMail'); diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index 881147964..192909b92 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -320,6 +320,14 @@ return array ( 'invoice-btn-title' => 'Rechnung', 'info' => 'Informationen', 'invoices' => 'Rechnungen', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Sendungen', 'order-and-account' => 'Bestellung und Rechnung', 'order-info' => 'Bestellinformationen', diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index ac7a8ad25..fd1c381bf 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -319,6 +319,14 @@ return [ 'invoice-btn-title' => 'Invoice', 'info' => 'Information', 'invoices' => 'Invoices', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Shipments', 'order-and-account' => 'Order and Account', 'order-info' => 'Order Information', @@ -1219,7 +1227,7 @@ return [ 'cancel-success' => ':name canceled successfully.', 'cancel-error' => ':name can not be canceled.', 'already-taken' => 'The :name has already been taken.', - 'order-pending' => 'Cannot delete account because some Order(s) are pending or processing state.' + 'order-pending' => 'Cannot delete :name account because some Order(s) are pending or processing state.' ], 'footer' => [ diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php new file mode 100644 index 000000000..c5fe20cb8 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -0,0 +1,1315 @@ + 'Guardar', + 'create' => 'Crear', + 'update' => 'Actualizar', + 'delete' => 'Borrar', + 'failed' => 'Falló', + 'store' => 'Almacén', + 'image' => 'Imagen', + 'no result' => 'Sin resultados', + 'product' => 'Producto', + 'attribute' => 'Atributo', + 'actions' => 'Acciones', + 'id' => 'ID', + 'action' => 'acción', + 'yes' => 'Sí', + 'no' => 'No', + 'true' => 'Verdadero', + 'false' => 'Falso', + 'apply' => 'Aplicar', + 'action' => 'Acción', + 'label' => 'Etiqueta', + 'name' => 'Nombre', + 'title' => 'Título', + 'code' => 'Código', + 'type' => 'Tipo', + 'required' => 'Requerido', + 'unique' => 'Único', + 'locale-based' => 'Basado en lugar', + 'channel-based' => 'Basado en canal', + 'status' => 'Estado', + 'select-option' => 'Seleccione opción', + 'category' => 'Categoría', + + 'common' => [ + 'no-result-found' => 'No se encontraron registros.', + 'country' => 'País', + 'state' => 'Departamento', + 'true' => 'Verdadero', + 'false' => 'Falso' + ], + + 'layouts' => [ + 'my-account' => 'Mi cuenta', + 'logout' => 'Desconectar', + 'visit-shop' => 'Visitar tienda', + 'dashboard' => 'Tablero', + 'sales' => 'Ventas', + 'orders' => 'Pedidos', + 'shipments' => 'Envíos', + 'invoices' => 'Facturas', + 'refunds' => 'Reembolsos', + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'categories' => 'Categorías', + 'attributes' => 'Atributos', + 'attribute-families' => 'Familias de atributos', + 'customers' => 'Clientes', + 'groups' => 'Grupos', + 'reviews' => 'Opiniones', + 'newsletter-subscriptions' => 'Suscripciones a newsletter por correo', + 'configure' => 'Configurar', + 'settings' => 'Ajustes', + 'locales' => 'Lugares', + 'currencies' => 'Monedas', + 'exchange-rates' => 'Tasas de cambio', + 'inventory-sources' => 'Fuentes de inventario', + 'channels' => 'Canales', + 'users' => 'Usuarios', + 'roles' => 'Roles', + 'sliders' => 'Sliders', + 'taxes' => 'Impuestos', + 'tax-categories' => 'Categorías de impuestos', + 'tax-rates' => 'Tasas de impuestos', + 'promotions' => 'Promociones', + 'discount' => 'Descuento', + 'cms' => 'CMS' + ], + + 'acl' => [ + 'dashboard' => 'Tablero', + 'sales' => 'Ventas', + 'orders' => 'Pedidos', + 'shipments' => 'Envíos', + 'invoices' => 'Facturas', + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'categories' => 'Categorías', + 'attributes' => 'Atributos', + 'attribute-families' => 'Familias de atributos', + 'customers' => 'Clientes', + 'groups' => 'Grupos', + 'reviews' => 'Opiniones', + 'newsletter-subscriptions' => 'Suscripciones a newsletter por correo', + 'configure' => 'Configurar', + 'settings' => 'Ajustes', + 'locales' => 'Lugares', + 'currencies' => 'Monedas', + 'exchange-rates' => 'Tasas de cambio', + 'inventory-sources' => 'Fuentes de inventario', + 'channels' => 'Canales', + 'users' => 'Usuarios', + 'roles' => 'Roles', + 'sliders' => 'Sliders', + 'taxes' => 'Impuestos', + 'tax-categories' => 'Categorías de impuestos', + 'tax-rates' => 'Tasas de impuestos', + 'edit' => 'Editar', + 'create' => 'Agregar', + 'delete' => 'Borrar', + 'promotions' => 'Promociones', + 'cart-rules' => 'Reglas del carrito', + 'catalog-rules' => 'Reglas del catálogo', + ], + + 'dashboard' => [ + 'title' => 'Tablero', + 'from' => 'Desde', + 'to' => 'Hasta', + 'total-customers' => 'Total Clientes', + 'total-orders' => 'Total Pedidos', + 'total-sale' => 'Total Ventas', + 'average-sale' => 'Promedio de pedidos vendidos', + 'increased' => ':progress%', + 'decreased' => ':progress%', + 'sales' => 'Ventas', + 'top-performing-categories' => 'Categorías de mayor rendimiento', + 'product-count' => ':count Productos', + 'top-selling-products' => 'Productos más vendidos', + 'sale-count' => ':count Ventas', + 'customer-with-most-sales' => 'Clientes con más ventas', + 'order-count' => ':count Pedidos', + 'revenue' => 'Ingresos :total', + 'stock-threshold' => 'Umbral de Stock', + 'qty-left' => 'Quedan :qty' + ], + + 'datagrid' => [ + 'mass-ops' => [ + 'method-error' => '¡Error! Se detectó un método erróneo, por favor verifique la configuración de acción masiva', + 'delete-success' => ':resource seleccionados fueron borrados con éxito', + 'partial-action' => 'Algunas acciones no se realizaron debido a restricciones en :resource', + 'update-success' => ':resource seleccionados fueron actualizados con éxito', + 'no-resource' => 'El recurso provisto es insuficiente para la acción' + ], + + 'id' => 'ID', + 'status' => 'Estado', + 'code' => 'Código', + 'admin-name' => 'Nombre', + 'name' => 'Nombre', + 'direction' => 'Dirección', + 'fullname' => 'Nombre completo', + 'type' => 'Tipo', + 'required' => 'Requerido', + 'unique' => 'Único', + 'per-locale' => 'Lugar ubicado', + 'per-channel' => 'Canal ubicado', + 'position' => 'Posición', + 'locale' => 'Lugar', + 'hostname' => 'Hostname', + 'email' => 'Email', + 'group' => 'Grupo', + 'phone' => 'Teléfono', + 'gender' => 'Género', + 'title' => 'Título', + 'layout' => 'Diseño', + 'url-key' => 'URL clave', + 'comment' => 'Comentario', + 'product-name' => 'Producto', + 'currency-name' => 'Nombre de la moneda', + 'exch-rate' => 'Tasa de cambio', + 'priority' => 'Prioridad', + 'subscribed' => 'Suscrito', + 'base-total' => 'Total base', + 'grand-total' => 'Gran total', + 'order-date' => 'Fecha pedido', + 'channel-name' => 'Nombre del canal', + 'billed-to' => 'Facturado a', + 'shipped-to' => 'Enviado a', + 'order-id' => 'Pedido #', + 'invoice-date' => 'Fecha de factura', + 'total-qty' => 'Cantidad total', + 'inventory-source' => 'Fuente de inventario', + 'shipment-date' => 'Fecha de envío', + 'shipment-to' => 'Enviar hacia', + 'sku' => 'SKU', + 'price' => 'Precio', + 'qty' => 'Cantidad', + 'permission-type' => 'Tipo de permiso', + 'identifier' => 'Identificador', + 'state' => 'Departamento', + 'country' => 'País', + 'tax-rate' => 'Tasa', + 'role' => 'Rol', + 'sub-total' => 'Subtotal', + 'no-of-products' => 'Número de productos', + 'attribute-family' => 'Familia de atributos', + 'starts-from' => 'Inicia en', + 'ends-till' => 'Termina en', + 'per-cust' => 'Por cliente', + 'usage-throttle' => 'Tiempos de uso', + 'for-guest' => 'Para invitados', + 'order_number' => 'Pedido #', + 'refund-date' => 'Fecha reembolso', + 'refunded' => 'Reembolsado', + 'start' => 'Inicio', + 'end' => 'Fin', + 'active' => 'Activo', + 'inactive' => 'Inactivo', + 'true' => 'Verdadero', + 'false' => 'Falso', + 'approved' => 'Aprobado', + 'pending' => 'Pendiente', + 'disapproved' => 'Rechazado', + 'coupon-code' => 'Código de cupón', + 'times-used' => 'Times Used', + 'created-date' => 'Creado en', + 'expiration-date' => 'Fecha expiración', + 'edit' => 'Editar', + 'delete' => 'Borrar', + 'view' => 'Ver', + 'rtl' => 'RTL', + 'ltr' => 'LTR', + 'update-status' => 'Actualizar Estado' + ], + + 'account' => [ + 'title' => 'Mi cuenta', + 'save-btn-title' => 'Guardar', + 'general' => 'General', + 'name' => 'Nombre', + 'email' => 'Email', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'change-password' => 'Cambiar contraseña de cuenta', + 'current-password' => 'Contraseña actual' + ], + + 'users' => [ + 'forget-password' => [ + 'title' => '¿Olvidó su contraseña?', + 'header-title' => 'Recuperar contraseña', + 'email' => 'Email registrado', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'back-link-title' => 'Regresar al login', + 'submit-btn-title' => 'Enviar correo de restablecimiento de contraseña' + ], + + 'reset-password' => [ + 'title' => 'restablecer contraseña', + 'email' => 'Email registrado', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'back-link-title' => 'Regresar al login', + 'submit-btn-title' => 'restablecer contraseña' + ], + + 'roles' => [ + 'title' => 'Roles', + 'add-role-title' => 'Agregar Rol', + 'edit-role-title' => 'Editar Rol', + 'save-btn-title' => 'Guardar Rol', + 'general' => 'General', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'access-control' => 'Control de acceso', + 'permissions' => 'Permisos', + 'custom' => 'Personalizado', + 'all' => 'Todos' + ], + + 'users' => [ + 'title' => 'Usuario', + 'add-user-title' => 'Agregar Usuario', + 'edit-user-title' => 'Editar Usuario', + 'save-btn-title' => 'Guardar Usuario', + 'general' => 'General', + 'email' => 'Email', + 'name' => 'Nombre', + 'password' => 'Contraseña', + 'confirm-password' => 'Confirmar contraseña', + 'status-and-role' => 'Estado y rol', + 'role' => 'Rol', + 'status' => 'Estado', + 'account-is-active' => 'La cuenta está activa', + 'current-password' => 'Ingrese la contraseña actual', + 'confirm-delete' => '¿Confirma que desea borrar esta cuenta?', + 'confirm-delete-title' => 'Confirmar contraseña antes de borrar', + 'delete-last' => 'Al menos un admin es requerido.', + 'delete-success' => '¡Éxito! Usuario borrado', + 'incorrect-password' => 'La contraseña que ingresó es incorrecta', + 'password-match' => 'La contraseña actual no coincide.', + 'account-save' => 'Los cambios en la cuenta fueron guardados con éxito.', + 'login-error' => 'Por favor verifique sus credenciales e intente nuevamente.', + 'activate-warning' => 'Su cuenta aún no ha sido activada, por favor contacte al administrador.' + ], + + 'sessions' => [ + 'title' => 'Acceder', + 'email' => 'Email', + 'password' => 'Contraseña', + 'forget-password-link-title' => '¿Olvidó su contraseña?', + 'remember-me' => 'Recordar esta sesión', + 'submit-btn-title' => 'Acceder' + ] + ], + + 'sales' => [ + 'orders' => [ + 'title' => 'Pedidos', + 'view-title' => 'Pedido #:order_id', + 'cancel-btn-title' => 'Cancelar', + 'shipment-btn-title' => 'Envío', + 'invoice-btn-title' => 'Factura', + 'info' => 'Información', + 'invoices' => 'Facturas', + 'shipments' => 'Envíos', + 'order-and-account' => 'Pedido y cuenta', + 'order-info' => 'Información del pedido', + 'order-date' => 'Fecha pedido', + 'order-status' => 'Estado del pedido', + 'order-status-canceled' => 'Cancelado', + 'order-status-closed' => 'Cerrado', + 'order-status-fraud' => 'Fraude', + 'order-status-pending' => 'Pendiente', + 'order-status-pending-payment' => 'Pendiente de pago', + 'order-status-processing' => 'Procesando', + 'order-status-success' => 'Completado', + 'channel' => 'Canal', + 'customer-name' => 'Nombre del cliente', + 'email' => 'Email', + 'contact-number' => 'Número de contacto', + 'account-info' => 'Información de la cuenta', + 'address' => 'Dirección', + 'shipping-address' => 'Dirección de envío', + 'billing-address' => 'Dirección de facturación', + 'payment-and-shipping' => 'Pago y envío', + 'payment-info' => 'Payment Información', + 'payment-method' => 'Método de pago', + 'currency' => 'Moneda', + 'shipping-info' => 'Información de envío', + 'shipping-method' => 'Método de envío', + 'shipping-price' => 'Precio de envío', + 'products-ordered' => 'Productos pedidos', + 'SKU' => 'SKU', + 'product-name' => 'Nombre del producto', + 'qty' => 'Cant', + 'artículo-status' => 'Estado del articulo', + 'artículo-ordered' => 'Pedido (:qty_ordered)', + 'artículo-invoice' => 'Facturado (:qty_invoiced)', + 'artículo-shipped' => 'Enviado (:qty_shipped)', + 'artículo-canceled' => 'Cancelado (:qty_canceled)', + 'artículo-refunded' => 'Reembolsado (:qty_refunded)', + 'price' => 'Precio', + 'total' => 'Total', + 'subtotal' => 'Subtotal', + 'shipping-handling' => 'Envío y manejo', + 'discount' => 'Descuento', + 'tax' => 'Impuesto', + 'tax-percent' => 'Porcentaje impuesto', + 'tax-amount' => 'Monto impuesto', + 'discount-amount' => 'Monto descuento', + 'discount-amount' => 'Monto descuento', + 'grand-total' => 'Gran total', + 'total-paid' => 'Total Pagado', + 'total-refunded' => 'Total reembolsado', + 'total-due' => 'Total adeudado', + 'cancel-confirm-msg' => '¿Está seguro que desea cancelar este pedido?', + 'refund-btn-title' => 'El monto del reembolso no debe ser cero', + 'refunds' => 'Reembolsos' + ], + + 'invoices' => [ + 'title' => 'Facturas', + 'id' => 'Id', + 'invoice-id' => 'Factura #', + 'date' => 'Fecha de factura', + 'order-id' => 'Pedido #', + 'customer-name' => 'Nombre del cliente', + 'status' => 'Estado', + 'amount' => 'Monto', + 'action' => 'Acción', + 'add-title' => 'Crear factura', + 'save-btn-title' => 'Guardar factura', + 'qty' => 'Cant', + 'qty-ordered' => 'Cant pedido', + 'qty-to-invoice' => 'Cant a facturar', + 'view-title' => 'Factura #:invoice_id', + 'bill-to' => 'Facturar a', + 'ship-to' => 'Enviar a', + 'print' => 'Imprimir', + 'order-date' => 'Fecha del pedido', + 'creation-error' => 'La creaciónd e facturas al pedido no está permitida.', + 'product-error' => 'La factura no puede ser creada sin productos.' + ], + + 'shipments' => [ + 'title' => 'Envíos', + 'id' => 'Id', + 'date' => 'Fecha de envío', + 'order-id' => 'Pedido #', + 'order-date' => 'Fecha del pedido', + 'customer-name' => 'Nombre del cliente', + 'total-qty' => 'Cantidad total', + 'action' => 'Acción', + 'add-title' => 'Crear envío', + 'save-btn-title' => 'Guardar envío', + 'qty-ordered' => 'Cant pedido', + 'qty-invoiced' => 'Cant facturada', + 'qty-to-ship' => 'Cant a enviar', + 'available-sources' => 'Fuentes disponibles', + 'source' => 'Fuente', + 'select-source' => 'Por favor seleccione la bodega', + 'qty-available' => 'Cant disponible', + 'inventory-source' => 'Fuente de inventario', + 'carrier-title' => 'Nombre transportista', + 'tracking-number' => 'Número de tracking', + 'view-title' => 'Envío #:shipment_id', + 'creation-error' => 'El envío no puede ser creado para este pedido.', + 'order-error' => 'La creación de envíos no está permitido.', + 'quantity-invalid' => 'La cantidad pedida es inválida o no está disponible.', + ], + + 'refunds' => [ + 'title' => 'Reembolsos', + 'id' => 'Id', + 'add-title' => 'Crear reembolso', + 'save-btn-title' => 'El monto del reembolso no debe ser cero', + 'order-id' => 'Pedido #', + 'qty-ordered' => 'Cant pedido', + 'qty-to-refund' => 'Cant a reembolsar', + 'refund-shipping' => 'Envío a reembolsar', + 'adjustment-refund' => 'Ajuste reembolso', + 'adjustment-fee' => 'Tarifa de ajuste', + 'update-qty' => 'Actualizar cantidades', + 'invalid-qty' => 'Se encontró una cantidad de articulos a reembolsar inválida.', + 'refund-limit-error' => 'El máximo disponible para reembolsar es :amount.', + 'refunded' => 'Reembolsado', + 'date' => 'Fecha reembolso', + 'customer-name' => 'Nombre del cliente', + 'status' => 'Estado', + 'action' => 'Acción', + 'view-title' => 'Reembolso #:refund_id', + 'invalid-refund-amount-error' => 'El monto del reembolso no debe ser cero.' + + ] + ], + + 'catalog' => [ + 'products' => [ + 'title' => 'Productos', + 'add-product-btn-title' => 'Agregar producto', + 'add-title' => 'Agregar producto', + 'edit-title' => 'Editar producto', + 'save-btn-title' => 'Guardar producto', + 'general' => 'General', + 'product-type' => 'Tipo de producto', + 'simple' => 'Simple', + 'configurable' => 'Configurable', + 'familiy' => 'Familia de atributos', + 'sku' => 'SKU', + 'configurable-attributes' => 'Atributos configurables', + 'attribute-header' => 'Atributo(s)', + 'attribute-option-header' => 'Opcion(es) de atributo', + 'no' => 'No', + 'yes' => 'Sí', + 'disabled' => 'Deshabilitado', + 'enabled' => 'Habilitado', + 'add-variant-btn-title' => 'Agregar variante', + 'name' => 'Nombre', + 'qty' => 'Cant', + 'price' => 'Precio', + 'weight' => 'Peso', + 'status' => 'Estado', + 'enabled' => 'Habilitado', + 'disabled' => 'Deshabilitado', + 'add-variant-title' => 'Agregar variante', + 'variant-already-exist-message' => 'Una variante con las mismas opciones de atributos ya existe.', + 'add-image-btn-title' => 'Agregar imagen', + 'mass-delete-success' => 'Todos los productos seleccionados han sido borrados con éxito', + 'mass-update-success' => 'Todos los productos seleccionados han sido actualizados con éxito', + 'configurable-error' => 'Por favor seleccione al menos un atributo configurable.', + 'categories' => 'Categorías', + 'images' => 'Imágenes', + 'inventories' => 'Inventarios', + 'variations' => 'Variaciones', + 'downloadable' => 'Información descargable', + 'links' => 'Links', + 'add-link-btn-title' => 'Agregar link', + 'samples' => 'Muestras', + 'add-sample-btn-title' => 'Agregar muestra', + 'downloads' => 'Descarga permitida', + 'file' => 'Archivo', + 'sample' => 'Muestra', + 'upload-file' => 'Subir archivo', + 'url' => 'Url', + 'sort-order' => 'Orden de clasificación', + 'browse-file' => 'Buscar archivo', + 'product-link' => 'Productos enlazados', + 'cross-selling' => 'Venta cruzada', + 'up-selling' => 'Up Selling', + 'related-products' => 'Productos relacionados', + 'product-search-hint' => 'Inicie escribiendo un nombre de producto', + 'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.', + 'searching' => 'Buscaring ...', + 'grouped-products' => 'Grouped Productos', + 'search-products' => 'Buscar Productos', + 'no-result-found' => 'Productos con el mismo nombre no fueron encontrados.', + 'channel' => 'Canales', + 'bundle-item' => 'Paquete de artículos', + 'add-option-btn-title' => 'Agregar opción', + 'option-title' => 'Título de opción', + 'input-type' => 'Tipo de opción', + 'is-required' => 'Es requerido', + 'select' => 'Lista de selección', + 'radio' => 'Opción única', + 'checkbox' => 'Opción múltiple', + 'multiselect' => 'Lista de selección múltiple', + 'new-option' => 'Nueva opción', + 'is-default' => 'Es predeterminada' + ], + + 'attributes' => [ + 'title' => 'Atributos', + 'add-title' => 'Agregar atributo', + 'edit-title' => 'Editar atributo', + 'save-btn-title' => 'Guardar atributo', + 'general' => 'General', + 'code' => 'Código atributo', + 'type' => 'Tipo de atributo', + 'text' => 'Texto', + 'textarea' => 'Área de texto', + 'price' => 'Precio', + 'boolean' => 'Booleano', + 'select' => 'Lista de selección', + 'multiselect' => 'Lista de selección múltiple', + 'datetime' => 'Fecha y hora', + 'date' => 'Fecha', + 'label' => 'Etiqueta', + 'admin' => 'Admin', + 'options' => 'Opciones', + 'position' => 'Posición', + 'add-option-btn-title' => 'Agregar opción', + 'validations' => 'Validaciones', + 'input_validation' => 'Validación entrada', + 'is_required' => 'Es requerido', + 'is_unique' => 'Es único', + 'number' => 'Número', + 'decimal' => 'Decimal', + 'email' => 'Email', + 'url' => 'URL', + 'configuration' => 'Configuración', + 'status' => 'Estado', + 'yes' => 'Sí', + 'no' => 'No', + 'value_per_locale' => 'Valor por lugar', + 'value_per_channel' => 'Valor por canal', + 'value_per_channel' => 'Valor por canal', + 'is_filterable' => 'Usar en navegación por capas', + 'is_configurable' => 'Usar para crear producto configurable', + 'admin_name' => 'Nombre del admin', + 'is_visible_on_front' => 'Visible en la página de vista de producto en Front-end', + 'swatch_type' => 'Tipo de muestra', + 'dropdown' => 'Desplegable', + 'color-swatch' => 'Color muestra', + 'image-swatch' => 'Imagen muestra', + 'text-swatch' => 'Texto muestra', + 'swatch' => 'Muestra', + 'image' => 'Imagen', + 'file' => 'Archivo', + 'checkbox' => 'Opción múltiple', + 'use_in_flat' => "Crear en tabla plana de productos", + 'is_comparable' => "El atributo es comparable", + 'default_null_option' => 'Crear opción vacía por defecto', + ], + 'families' => [ + 'title' => 'Familias', + 'add-family-btn-title' => 'Agregar familia', + 'add-title' => 'Agregar familia', + 'edit-title' => 'Editar familia', + 'save-btn-title' => 'Guardar familia', + 'general' => 'General', + 'code' => 'Código familia', + 'name' => 'Nombre', + 'groups' => 'Grupos', + 'add-group-title' => 'Agregar grupo', + 'position' => 'Posición', + 'attribute-code' => 'Código', + 'type' => 'Tipo', + 'add-attribute-title' => 'Agregar atributos', + 'search' => 'Buscar', + 'group-exist-error' => 'Ya existe un grupo con el mismo nombre.' + ], + 'categories' => [ + 'title' => 'Categorías', + 'add-title' => 'Agregar categoría', + 'edit-title' => 'Editar categoría', + 'save-btn-title' => 'Guardar categoría', + 'general' => 'General', + 'name' => 'Nombre', + 'visible-in-menu' => 'Visible en el menú', + 'yes' => 'Sí', + 'no' => 'No', + 'position' => 'Posición', + 'display-mode' => 'Modo de visualización', + 'products-and-description' => 'Productos y descripción', + 'products-only' => 'Solo productos', + 'description-only' => 'Solo descripción', + 'description-and-images' => 'Descripción e imágenes', + 'description' => 'Descripción', + 'parent-category' => 'Categoría padre', + 'seo' => 'SEO', + 'slug' => 'Slug', + 'meta_title' => 'Meta Title', + 'meta_description' => 'Meta Description', + 'meta_keywords' => 'Meta Keywords', + 'image' => 'Imagen', + 'filterable-attributes' => 'Atributos filtrables', + 'attributes' => 'Atributos', + ] + ], + + 'configuration' => [ + 'title' => 'Configuración', + 'save-btn-title' => 'Guardar', + 'save-message' => 'Configuración guardada con éxito', + 'yes' => 'Sí', + 'no' => 'No', + 'delete' => 'Borrar', + + 'tax-categories' => [ + 'title' => 'Categorías de impuestos', + 'add-title' => 'Agregar categoría de impuestos', + 'edit-title' => 'Editar categoría de impuestoss', + 'save-btn-title' => 'Guardar categoría de impuestos', + 'general' => 'Categorías de impuestos', + 'select-channel' => 'Seleccione canal', + 'name' => 'Nombre', + 'code' => 'Código', + 'description' => 'Descripción', + 'select-taxrates' => 'Seleccione tasa de impuestos', + 'edit' => [ + 'title' => 'Editar categoría de impuestos', + 'edit-button-title' => 'Editar categoría de impuestos' + ] + ], + + 'tax-rates' => [ + 'title' => 'Tasas de impuestos', + 'add-title' => 'Agregar tasa de impuesto', + 'edit-title' => 'Editar tasa de impuesto', + 'save-btn-title' => 'Guardar tasa de impuesto', + 'general' => 'Tasa de impuesto', + 'identifier' => 'Identificador', + 'is_zip' => 'Habilitar rango Zip', + 'zip_from' => 'Zip desde', + 'zip_to' => 'Zip hasta', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'tax_rate' => 'Tasa', + 'edit' => [ + 'title' => 'Editar tasa de impuesto', + 'edit-button-title' => 'Editar tasa' + ], + 'zip_code' => 'Código Zip', + 'is_zip' => 'Habilitar rango Zip', + ], + + 'sales' => [ + 'shipping-method' => [ + 'title' => 'Método de envíos', + 'save-btn-title' => 'Guardar', + 'description' => 'Descripción', + 'active' => 'Activo', + 'status' => 'Estado' + ] + ] + ], + + 'settings' => [ + 'locales' => [ + 'title' => 'Lugares', + 'add-title' => 'Agregar lugar', + 'edit-title' => 'Editar lugar', + 'add-title' => 'Agregar lugar', + 'save-btn-title' => 'Guardar lugar', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'direction' => 'Dirección', + 'create-success' => 'Lugar creado con éxito.', + 'update-success' => 'Lugar actualizado con éxito.', + 'delete-success' => 'Lugar borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos un lugar.', + ], + 'countries' => [ + 'title' => 'Países', + 'add-title' => 'Agregar país', + 'save-btn-title' => 'Guardar país', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre' + ], + 'currencies' => [ + 'title' => 'Monedas', + 'add-title' => 'Agregar moneda', + 'edit-title' => 'Editar moneda', + 'save-btn-title' => 'Guardar moneda', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'symbol' => 'Símbolo', + 'create-success' => 'Moneda creada con éxito.', + 'update-success' => 'Moneda actualizada con éxito.', + 'delete-success' => 'Moneda borrada con éxito.', + 'last-delete-error' => 'Se requiere al menos una moneda.', + ], + 'exchange_rates' => [ + 'title' => 'Tasas de cambio', + 'add-title' => 'Agregar tasa de cambio', + 'edit-title' => 'Editar tasa de cambio', + 'save-btn-title' => 'Guardar tasa de cambio', + 'general' => 'General', + 'source_currency' => 'Moneda origen', + 'target_currency' => 'Moneda destino', + 'rate' => 'Tasa', + 'exchange-class-not-found' => ':service exchange rate class not found', + 'update-rates' => 'Actualizar tasas', + 'create-success' => 'Tasa de cambio creada con éxito.', + 'update-success' => 'Tasa de cambio actualizada con éxito.', + 'delete-success' => 'Tasa de cambio borrada con éxito.', + 'last-delete-error' => 'Se requiere al menos una tasa de cambio.', + ], + 'inventory_sources' => [ + 'title' => 'Fuentes de inventario', + 'add-title' => 'Agregar fuente de inventario', + 'edit-title' => 'Editar fuente de inventario', + 'save-btn-title' => 'Guardar fuente de inventario', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'source-is-active' => 'Está activa', + 'contact-info' => 'Información de contacto', + 'contact_name' => 'Nombre', + 'contact_email' => 'Email', + 'contact_number' => 'Número de contacto', + 'contact_fax' => 'Fax', + 'address' => 'Dirección', + 'country' => 'País', + 'state' => 'Departamento', + 'city' => 'Ciudad', + 'street' => 'Dirección', + 'postcode' => 'Código postal', + 'priority' => 'Prioridad', + 'latitude' => 'Latitud', + 'longitude' => 'Longitud', + 'status' => 'Estado', + 'create-success' => 'Fuente de inventario creado con éxito.', + 'update-success' => 'Fuente de inventario actualizado con éxito.', + 'delete-success' => 'Fuente de inventario borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos una fuente de inventario.', + ], + 'channels' => [ + 'title' => 'Canales', + 'add-title' => 'Agregar canal', + 'edit-title' => 'Editar canal', + 'save-btn-title' => 'Guardar canal', + 'general' => 'General', + 'code' => 'Código', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'hostname' => 'Hostname', + 'currencies-and-locales' => 'Monedas y lugares', + 'locales' => 'Lugares', + 'default-locale' => 'Lugar predeterminado', + 'currencies' => 'Monedas', + 'base-currency' => 'Moneda predeterminada', + 'root-category' => 'Categoría raíz', + 'inventory_sources' => 'Fuentes de inventario', + 'design' => 'Diseño', + 'theme' => 'Tema', + 'home_page_content' => 'Contenido página de inicio', + 'footer_content' => 'Contenido pie de página', + 'logo' => 'Logo', + 'favicon' => 'Favicon', + 'create-success' => 'Canal creado con éxito.', + 'update-success' => 'Canal actualizado con éxito.', + 'delete-success' => 'Canal borrado con éxito.', + 'last-delete-error' => 'Se requiere al menos un canal.', + 'seo' => 'SEO página de inicio', + 'seo-title' => 'Meta title', + 'seo-description' => 'Meta description', + 'seo-keywords' => 'Meta keywords', + + ], + + 'sliders' => [ + 'title' => 'Sliders', + 'name' => 'Nombre', + 'add-title' => 'Crear slider', + 'edit-title' => 'Editar slider', + 'save-btn-title' => 'Guardar slider', + 'general' => 'General', + 'image' => 'Imagen', + 'content' => 'Contenido', + 'channels' => 'Canal', + 'created-success' => 'Slider creado con éxito', + 'created-fault' => 'Error al intentar crear el slider', + 'update-success' => 'Slider actualizado con éxito', + 'update-fail' => 'El slider no pudo ser actualizado', + 'delete-success' => 'No puede borrar el último slider', + 'delete-fail' => 'Slider borrado con éxito' + ], + + 'tax-categories' => [ + 'title' => 'Categorías de impuestos', + 'add-title' => 'Crear categoría de impuestos', + 'edit-title' => 'Editar categoría de impuestos', + 'save-btn-title' => 'Guardar categoría de impuestos', + 'general' => 'General', + 'select-channel' => 'Seleccione canal', + 'name' => 'Nombre', + 'code' => 'Código', + 'description' => 'Descripción', + 'select-taxrates' => 'Seleccione tasa de impuestos', + 'edit' => [ + 'title' => 'Editar categoría de impuestos', + 'edit-button-title' => 'Editar categoría de impuestos' + ], + 'create-success' => 'Nueva categoría de impuestos creada con éxito', + 'create-error' => 'Error mientras se creaba la categoría de impuestos', + 'update-success' => 'La categoría de impuestos fue actualizada con éxito', + 'update-error' => 'Error mientras se actualizaba la categoría de impuestos', + 'atleast-one' => 'No puede borrar la última categoría de impuestos', + 'delete' => 'La categoría de impuestos fue borrada' + ], + + 'tax-rates' => [ + 'title' => 'Tasas de impuestos', + 'add-title' => 'Crear tasa de impuesto', + 'edit-title' => 'Editar tasa de impuesto', + 'save-btn-title' => 'Guardar tasa de impuesto', + 'general' => 'Tasa de impuesto', + 'identifier' => 'Identificador', + 'is_zip' => 'Habilitar rango Zip', + 'zip_from' => 'Zip desde', + 'zip_to' => 'Zip hasta', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'tax_rate' => 'Tasa', + 'edit' => [ + 'title' => 'Editar tasa de impuesto', + 'edit-button-title' => 'Editar tasa' + ], + 'zip_code' => 'Código Zip', + 'is_zip' => 'Habilitar rango Zip', + 'create-success' => 'Tasa de impuesto creada con éxito', + 'create-error' => 'No se puede crear la tasa de impuesto', + 'update-success' => 'Tasa de impuesto actualizada con éxito', + 'update-error' => '¡Error! La tasa de impuesto no pudo ser actualizada', + 'delete' => 'La tasa de impuesto fue borrada con éxito', + 'atleast-one' => 'No se pudo borrar la tasa de impuesto' + ], + 'development' => [ + 'title' => 'Desarrollo', + ] + ], + + 'customers' => [ + 'groups' =>[ + 'add-title' => 'Agregar grupo', + 'edit-title' => 'Editar grupo', + 'save-btn-title' => 'Guardar grupo', + 'title' => 'Grupos', + 'save-btn-title' => 'Guardar grupo', + 'code' => 'Código', + 'name' => 'Nombre', + 'is_user_defined' => 'Usuario definido', + 'yes' => 'Sí' + ], + + 'addresses' => [ + 'title' => 'Lista de direcciones de :customer_name', + 'vat_id' => 'Vat id', + 'create-title' => 'Crear dirección del cliente', + 'edit-title' => 'Actualizar dirección del cliente', + 'title-orders' => 'Lista de pedidos de :customer_name', + 'address-list' => 'Lista de direcciones', + 'order-list' => 'Lista de pedidos', + 'address-id' => 'Dirección ID', + 'address-1' => 'Dirección 1', + 'city' => 'Ciudad', + 'state-name' => 'Departamento', + 'country-name' => 'País', + 'postcode' => 'Código postal', + 'default-address' => 'Dirección predeterminada', + 'yes' => 'Sí', + 'not-approved' => 'No aprobado', + 'no' => 'No', + 'dash' => '-', + 'delete' => 'Borrar', + 'create-btn-title' => 'Agregar dirección', + 'save-btn-title' => 'Guardar dirección', + 'general' => 'General', + 'success-create' => 'Dirección del cliente creada con éxito.', + 'success-update' => 'Dirección del cliente actualizada con éxito.', + 'success-delete' => 'Dirección del cliente borrada con éxito.', + 'success-mass-delete' => 'Las direcciones seleccionadas han sido borradas con éxito.', + 'error-create' => 'La dirección del cliente no fue creada.', + ], + + 'note' => [ + 'title' => 'Agregar nota', + 'save-note' => 'Guardar nota', + 'enter-note' => 'Ingresar nota', + 'help-title' => 'Agregar una nota a este cliente' + ], + + 'customers' => [ + 'add-title' => 'Agregar cliente', + 'edit-title' => 'Editar cliente', + 'title' => 'Clientes', + 'first_name' => 'Primer nombre', + 'last_name' => 'Apellidos', + 'gender' => 'Género', + 'email' => 'Email', + 'date_of_birth' => 'Fecha de nacimiento', + 'phone' => 'Teléfono', + 'customer_group' => 'Grupo', + 'save-btn-title' => 'Guardar cliente', + 'channel_name' => 'Nombre del canal', + 'state' => 'Departamento', + 'select-state' => 'Seleccione un departamento.', + 'country' => 'País', + 'other' => 'Otro', + 'male' => 'Masculino', + 'female' => 'Femenino', + 'phone' => 'Teléfono', + 'group-default' => 'No puede borrar el grupo predeterminado.', + 'edit-help-title' => 'Editar cliente', + 'delete-help-title' => 'Borrar cliente', + 'addresses' => 'Direcciones', + 'mass-destroy-success' => 'Clientes borrados con éxito', + 'mass-update-success' => 'Clientes actualizados con éxito', + 'status' => 'Estado', + 'active' => 'Activo', + 'inactive' => 'Inactivo' + ], + + 'reviews' => [ + 'title' => 'Opiniones', + 'edit-title' => 'Editar opinión', + 'rating' => 'Calificación', + 'status' => 'Estado', + 'comment' => 'Comentario', + 'pending' => 'Pendiente', + 'approved' => 'Aprobado', + 'disapproved' => 'Desaprobado' + ], + + 'subscribers' => [ + 'title' => 'Suscriptores', + 'title-edit' => 'Editar suscriptor', + 'email' => 'Email', + 'is_subscribed' => 'Suscrito', + 'edit-btn-title' => 'Actualizar suscriptor', + 'update-success' => 'El suscriptor fue actualizado con éxito', + 'update-failed' => '¡Error! No puede desuscribir al suscriptor', + 'delete' => 'El suscriptor fue borrado con éxito', + 'delete-failed' => '¡Error! El suscriptor no pudo ser borrado' + ] + ], + + 'promotions' => [ + 'cart-rules' => [ + 'title' => 'Reglas del carrito', + 'add-title' => 'Agregar regla de carrito', + 'edit-title' => 'Editar regla de carrito', + 'save-btn-title' => 'Guardar regla de carrito', + 'rule-information' => 'Información de regla', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'status' => 'Estado', + 'is-active' => 'La regla está activa', + 'channels' => 'Canales', + 'customer-groups' => 'Grupos', + 'coupon-type' => 'Tipo de cupón', + 'no-coupon' => 'No. de cupón', + 'specific-coupon' => 'Cupón específico', + 'auto-generate-coupon' => 'Auto generar cupón', + 'no' => 'No', + 'yes' => 'Sí', + 'coupon-code' => 'Código de cupón', + 'uses-per-coupon' => 'Usos por cupón', + 'uses-per-customer' => 'Usos por cliente', + 'uses-per-customer-control-info' => 'Será usado para clientes conectados solamente.', + 'from' => 'Desde', + 'to' => 'Hasta', + 'priority' => 'Prioridad', + 'conditions' => 'Condiciones', + 'condition-type' => 'Tipo de condición', + 'all-conditions-true' => 'Todas las condiciones son verdaderas', + 'any-condition-true' => 'Cualquier condición es verdadera', + 'add-condition' => 'Agregar condición', + 'choose-condition-to-add' => 'Elija una condición para agregar', + 'cart-attribute' => 'Atributo de carrito', + 'subtotal' => 'Subtotal', + 'total-item-qty' => 'Cant total artículos', + 'total-weight' => 'Peso total', + 'payment-method' => 'Método de pago', + 'shipping-method' => 'Método de envío', + 'shipping-postcode' => 'Código postal/Zip de envío', + 'shipping-state' => 'Departamento de envío', + 'shipping-country' => 'País de envío', + 'cart-item-attribute' => 'Atributo del artículo del carrito', + 'price-in-cart' => 'Precio en el carrito', + 'qty-in-cart' => 'Cantidad en el carrito', + 'product-attribute' => 'Atributo de producto', + 'attribute-name-children-only' => ':attribute_name (Solo hijos)', + 'attribute-name-parent-only' => ':attribute_name (Solo padre)', + 'is-equal-to' => 'Es igual a', + 'is-not-equal-to' => 'No es igual a', + 'equals-or-greater-than' => 'Iguales o más grandes que', + 'equals-or-less-than' => 'Iguales o menos que', + 'greater-than' => 'Más grande que', + 'less-than' => 'Menos que', + 'contain' => 'Contiene', + 'contains' => 'Contiene', + 'does-not-contain' => 'No contiene', + 'actions' => 'Acciones', + 'action-type' => 'Tipo de acción', + 'percentage-product-price' => 'Porcentaje del precio del producto', + 'fixed-amount' => 'Monto fijo', + 'fixed-amount-whole-cart' => 'Monto fijo a todo el carrito', + 'buy-x-get-y-free' => 'Compre X y lleve Y gratis', + 'discount-amount' => 'Monto descuento', + 'discount-quantity' => 'La cantidad a descontar máxima permitida', + 'discount-step' => 'Compre X cantidad', + 'free-shipping' => 'Envío gratis', + 'apply-to-shipping' => 'Aplicar al envío', + 'coupon-codes' => 'Códigos de cupón', + 'coupon-qty' => 'Cant de cupón', + 'code-length' => 'Largo de código', + 'code-format' => 'Formato de código', + 'alphanumeric' => 'Alfanumérico', + 'alphabetical' => 'Alfabético', + 'numeric' => 'Numérico', + 'code-prefix' => 'Prefijo código', + 'code-suffix' => 'Sufijo código', + 'generate' => 'Generar', + 'cart-rule-not-defind-error' => 'La regla de carrito no está definida', + 'mass-delete-success' => 'Todos los cupones seleccionados han sido borrados con éxito.', + 'end-other-rules' => 'Terminar otras reglas', + 'children-categories' => 'Categorías (Solo hijos)', + 'parent-categories' => 'Categorías (Solo padre)', + 'categories' => 'Categorías', + 'attribute_family' => 'Familia de atributos' + ], + + 'catalog-rules' => [ + 'title' => 'Reglas del catálogo', + 'add-title' => 'Agregar regla del catálogo', + 'edit-title' => 'Editar regla del catálogo', + 'save-btn-title' => 'Guardar regla del catálogo', + 'rule-information' => 'Información de regla', + 'name' => 'Nombre', + 'description' => 'Descripción', + 'status' => 'Estado', + 'is-active' => 'La regla del catálogo está activa', + 'channels' => 'Canales', + 'customer-groups' => 'Grupos', + 'no' => 'No', + 'yes' => 'Sí', + 'from' => 'Desde', + 'to' => 'Hasta', + 'priority' => 'Prioridad', + 'conditions' => 'Condiciones', + 'condition-type' => 'Tipo de condición', + 'all-conditions-true' => 'Todas las condiciones son verdaderas', + 'any-condition-true' => 'Cualquier condición es verdadera', + 'add-condition' => 'Agregar condición', + 'choose-condition-to-add' => 'Elija una condición para agregar', + 'product-attribute' => 'Atributo de producto', + 'attribute-name-children-only' => ':attribute_name (Solo hijos)', + 'attribute-name-parent-only' => ':attribute_name (Solo padre)', + 'is-equal-to' => 'Es igual a', + 'is-not-equal-to' => 'No es igual a', + 'equals-or-greater-than' => 'Iguales o más grandes que', + 'equals-or-less-than' => 'Iguales o menos que', + 'greater-than' => 'Más grande que', + 'less-than' => 'Menos que', + 'contain' => 'Contiene', + 'contains' => 'Contienes', + 'does-not-contain' => 'No contiene', + 'actions' => 'Acciones', + 'action-type' => 'Tipo de acción', + 'percentage-product-price' => 'Porcentaje del precio del producto', + 'fixed-amount' => 'Monto fijo', + 'fixed-amount-whole-cart' => 'Monto fijo a todo el catálogo', + 'buy-x-get-y-free' => 'Compre X y lleve Y gratis', + 'discount-amount' => 'Monto descuento', + 'mass-delete-success' => 'Todos los cupones seleccionados han sido borrados con éxito.', + 'end-other-rules' => 'Terminar otras reglas', + 'categories' => 'Categorías', + 'attribute_family' => 'Familia de atributos' + ] + ], + + 'error' => [ + 'go-to-home' => 'REGRESAR AL INICIO', + 'in-maitainace' => 'En mantenimiento', + 'right-back' => 'Estaremos de vuelta', + + '404' => [ + 'page-title' => '404 página no encontrada', + 'name' => '404', + 'title' => 'Página no encontrada', + 'message' => 'La página que está buscando no existe o ha sido movida. Navegue usando el menú lateral.' + ], + '403' => [ + 'page-title' => '403 prohibido', + 'name' => '403', + 'title' => 'Prohibido', + 'message' => 'Usted no tiene permisos para acceder a esta página' + ], + '500' => [ + 'page-title' => '500 error interno de servidor', + 'name' => '500', + 'title' => 'Error interno de servidor', + 'message' => 'El servidor encontró un error interno.' + ], + '401' => [ + 'page-title' => '401 no autorizado', + 'name' => '401', + 'title' => 'No autorizado', + 'message' => 'La solicitud no se ha aplicado porque carece de credenciales de autenticación válidas para el recurso de destino.' + ], + ], + + 'export' => [ + 'export' => 'Exportar', + 'import' => 'Importar', + 'format' => 'Seleccione el formato', + 'download' => 'Descargar', + 'upload' => 'Subir', + 'csv' => 'CSV', + 'xls' => 'XLS', + 'file' => 'Archivo', + 'upload-error' => 'El archivo debe ser un archivo tipo: xls, xlsx, csv.', + 'duplicate-error' => 'El identificador debe ser único, identificador duplicado :identifier en la fila :position.', + 'enough-row-error' => 'el archivo no tiene suficientes filas', + 'allowed-type' => 'Tipo permitido :', + 'file-type' => 'csv, xls, xlsx.', + 'no-records' => 'Nada para exportar', + 'illegal-format' => '¡Error! Este tipo de formato no es compatible o es ilegal' + ], + + 'cms' => [ + 'pages' => [ + 'general' => 'General', + 'seo' => 'SEO', + 'pages' => 'Páginas', + 'title' => 'Páginas', + 'add-title' => 'Agregar página', + 'content' => 'Contenido', + 'url-key' => 'URL clave', + 'channel' => 'Canales', + 'locale' => 'Lugares', + 'create-btn-title' => 'Guardar página', + 'edit-title' => 'Editar Page', + 'edit-btn-title' => 'Guardar página', + 'create-success' => 'Página creada con éxito', + 'create-partial' => 'Algunas de las páginas solicitadas ya existen', + 'create-failure' => 'Todas las páginas solicitadas ya existen', + 'update-success' => 'Página actualizada con éxito', + 'update-failure' => 'La página no pudo ser actualizada', + 'page-title' => 'Título de la página', + 'layout' => 'Diseño', + 'meta_keywords' => 'Meta Keywords', + 'meta_description' => 'Meta Description', + 'meta_title' => 'Meta Title', + 'delete-success' => 'Página CMS borrada con éxito', + 'delete-failure' => 'Página CMS no pudo ser borrada', + 'preview' => 'Previsualización', + 'one-col' => '
Usar class: "static-container one-column" para diseño de una columna.
', + 'two-col' => '
Usar class: "static-container two-column" para diseño de dos columnas.
', + 'three-col' => '
Usar class: "static-container three-column" para diseño de tres columnas.
', + 'helper-classes' => 'Clases de ayuda' + ] + ], + + 'response' => [ + 'being-used' => 'Este recurso: :name está siendo usado en :source', + 'cannot-delete-default' => 'No puede borrar el canal predeterminado', + 'create-success' => ':name :name creado con éxito.', + 'update-success' => ':name actualizado con éxito.', + 'delete-success' => ':name borrado con éxito.', + 'delete-failed' => 'Se encontró un error mientras borraba :name.', + 'last-delete-error' => 'Se requiere al menos un :name.', + 'user-define-error' => 'No puede borrar sistema :name', + 'attribute-error' => ':name está siendo usado en productos configurables.', + 'attribute-product-error' => ':name está siendo usado en productos.', + 'customer-associate' => ':name no puede ser borrado porque el cliente está asociado a este grupo.', + 'currency-delete-error' => 'Esta moneda está definida como moneda base de un canal por lo tanto no puede ser borrada.', + 'upload-success' => ':name subido con éxito.', + 'delete-category-root' => 'No puede borrar la categoría raíz', + 'create-root-failure' => 'Una categoría con nombre raíz ya existe', + 'cancel-success' => ':name cancelado con éxito.', + 'cancel-error' => ':name no puede ser cancelado.', + 'already-taken' => 'El :name ya ha sido tomado.', + 'order-pending' => 'No puede borrar la cuenta porque algun(os) pedido(s) están en estado pendiente o procesando.' + ], + + 'footer' => [ + 'copy-right' => 'Powered by
Bagisto, A Community Project by Webkul', + ], + + 'admin' => [ + 'emails' => [ + 'email' => 'Email', + 'notification_label' => 'Notificaciones', + 'notifications' => [ + 'verification' => 'Enviar email de verificación', + 'registration' => 'Enviar email de registro', + 'customer' => 'Enviar email de cliente', + 'new-order' => 'Enviar email de confirmación de pedido', + 'new-admin' => 'Enviar email de invitación de admin', + 'new-invoice' => 'Enviar email de confirmación de factura', + 'new-refund' => 'Enviar email de "El monto de reembolso no debe ser cero"', + 'new-shipment' => 'Enviar email de notificación de envío de pedido', + 'new-inventory-source' => 'Enviar email de notificación de nueva fuente de inventario', + 'cancel-order' => 'Enviar email de notificación de cancelación de pedido', + ], + + ], + 'system' => [ + 'catalog' => 'Catálogo', + 'products' => 'Productos', + 'guest-checkout' => 'Compras como invitado', + 'allow-guest-checkout' => 'Permitir compras como invitado', + 'allow-guest-checkout-hint' => 'Aviso: Si eligió permitir, esta opción puede ser configurada específicamente para cada producto.', + 'review' => 'Opiniones', + 'allow-guest-review' => 'Permitir opiniones como invitado', + 'inventory' => 'Inventario', + 'stock-options' => 'Opciones de stock', + 'allow-backorders' => 'Permitir backorders', + 'customer' => 'Cliente', + 'settings' => 'Ajustes', + 'address' => 'Dirección', + 'street-lines' => 'Líneas en la dirección', + 'sales' => 'Ventas', + 'shipping-methods' => 'Método de envíos', + 'free-shipping' => 'Envío gratis', + 'flate-rate-shipping' => 'Envío con tarifa plana', + 'shipping' => 'Envío', + 'origin' => 'Origen', + 'country' => 'País', + 'state' => 'Departamento', + 'zip' => 'Zip', + 'city' => 'Ciudad', + 'street-address' => 'Dirección', + 'title' => 'Título', + 'description' => 'Descripción', + 'rate' => 'Tasa', + 'status' => 'Estado', + 'type' => 'Tipo', + 'payment-methods' => 'Métodos de pago', + 'cash-on-delivery' => 'Pago contraentrega', + 'money-transfer' => 'Transferencia', + 'paypal-standard' => 'Paypal', + 'business-account' => 'Cuenta de negocio', + 'newsletter' => 'Suscripción a newsletter', + 'newsletter-subscription' => 'Permitir suscripciones a newsletter', + 'email' => 'Verificación de email', + 'email-verification' => 'Permitir verificación de email', + 'sort_order' => 'Orden de clasificación', + 'general' => 'General', + 'footer' => 'Pie de página', + 'content' => 'Contenido', + 'footer-content' => 'Texto de pie de página', + 'footer-toggle' => 'Mostrar/Esconder pie de página', + 'locale-options' => 'Opciones de unidades', + 'weight-unit' => 'Unidad de peso', + 'email-settings' => 'Ajustes de email', + 'email-sender-name' => 'Nombre de remitente', + 'shop-email-from' => 'Email de tienda [Para envío de emails]', + 'admin-name' => 'Nombre del admin', + 'admin-email' => 'Email del admin', + 'admin-page-limit' => 'Artículos por página predeterminado (Admin)', + 'design' => 'Diseño', + 'admin-logo' => 'Logo del admin', + 'logo-image' => 'Imagen logo', + 'credit-max' => 'Crédito máximo para el cliente', + 'credit-max-value' => 'Valor máximo de crédito para el cliente', + 'use-credit-max' => 'Usar crédito máximo', + 'order-settings' => 'Ajustes de pedido', + 'orderNumber' => 'Pedido #', + 'order-number-prefix' => 'Prefijo para Pedido #', + 'order-number-length' => 'Largo para Pedido #', + 'order-number-suffix' => 'Sufijo para Pedido #', + 'default' => 'Predeterminado', + 'sandbox' => 'Sandbox', + 'all-channels' => 'Todos', + 'all-locales' => 'Todos', + 'invoice-slip-design' => 'Diseño parte trasera factura', + 'logo' => 'logo' + ] + ] +]; diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 6f88bc54e..410af2d47 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'صورت حساب', 'info' => 'اطلاعات', 'invoices' => 'صورت حساب ها', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'حمل و نقل ها', 'order-and-account' => 'سفارش و حساب', 'order-info' => 'اطلاعات سفارش', diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index 580ab92d2..fca9749c8 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Fattura', 'info' => 'Informazoni', 'invoices' => 'Fatture', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Spedizioni', 'order-and-account' => 'Ordine e Account', 'order-info' => 'informazioni Ordine', diff --git a/packages/Webkul/Admin/src/Resources/lang/nl/app.php b/packages/Webkul/Admin/src/Resources/lang/nl/app.php index 3c67966f2..f7ca87ef7 100644 --- a/packages/Webkul/Admin/src/Resources/lang/nl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/nl/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Factuur', 'info' => 'Informatie', 'invoices' => 'Facturen', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Verzendingen', 'order-and-account' => 'Order and Account', 'order-info' => 'Order Information', diff --git a/packages/Webkul/Admin/src/Resources/lang/pl/app.php b/packages/Webkul/Admin/src/Resources/lang/pl/app.php index a714a24b3..960202a88 100644 --- a/packages/Webkul/Admin/src/Resources/lang/pl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pl/app.php @@ -317,6 +317,14 @@ return [ 'invoice-btn-title' => 'Faktura', 'info' => 'Informacje', 'invoices' => 'Faktury', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Przesyłki', 'order-and-account' => 'Zamówienie i konto', 'order-info' => 'Informacje o zamówieniu', diff --git a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php index fb31ad0dc..4043e01f3 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -318,6 +318,14 @@ return [ 'invoice-btn-title' => 'Faturar', 'info' => 'Informação', 'invoices' => 'Faturas', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Envios', 'order-and-account' => 'Pedido e Conta', 'order-info' => 'Informação do Pedido', diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php index b9bd5afd2..f1c7b8103 100644 --- a/packages/Webkul/Admin/src/Resources/lang/tr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -316,6 +316,14 @@ return [ 'invoice-btn-title' => 'Fatura', 'info' => 'Bilgi', 'invoices' => 'Faturalar', + 'invoices-change-title' => 'Change invoice state', + 'invoices-change-state-desc' => 'Please select the new invoice state:', + 'invoice-status-paid' => 'Paid', + 'invoice-status-pending' => 'Pending', + 'invoice-status-overdue' => 'Overdue', + 'invoice-status-update' => 'Save changes', + 'invoice-status-confirmed' => 'The invoice state has been changed.', + 'invoice-status-error' => 'Could not update the invoice state. ', 'shipments' => 'Kargo', 'order-and-account' => 'Sipariş ve Hesap', 'order-info' => 'Sipariş Bilgisi', diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php index 7626ffdd2..175d36e63 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php @@ -11,7 +11,7 @@