###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################
### This file contains labels directly translated by XUI framework
Add=A\u00f1adir
CASH=CASH
CASH_DRAWER_COMMUNICATION_ERROR=Error en comunicaci\u00f3n de caja
CASH_DRAWER_IS_OPEN=La caja est\u00e1 abierta
CHANGE_PRICE=Cambiando precio
CHECK=CHEQUE
CLEAR_ALL=Limpiar todos
CLEAR_CACHE=Limpiar cach\u00e9
CLEAR_ONE=Anular el pago
CLOSE=Cerrar
CLR=LIMPIAR
CLR_DISC=LIMPIAR DISCO
CREDIT=Cr\u00e9dito
Cancel=Cancel
DEL=BORRAR
Delete=Suprimir
ENT=Validar
EXCEPTION=Excepci\u00f3n
EXIT=Salir
FINISH=Fin
FUNCTION_NOT_YET_SUPPORTED=Funci\u00f3n no soportada
GIFT_CERT=Certificado de regalo
INVALID_CARD_NUMBER=Tarjeta de cr\u00e9dito inv\u00e1lida
ITEM_DISC=Descuento de art\u00edculo
ITEM_MODIFICATION_ERROR=Error en la modificaci\u00f3n del art\u00edculo
LANG=Idioma
LOCK=Bloquear
MAIN=Principal
MANAGER_NOT_LOGGED_IN=Administrador no logueado
MGR=Gestion
MOD=Cambiar la cantidad
NOT_ENOUGH_FUNDS=No tiene suficientes fondos
NO_ITEMS_SOLD=Art\u00edculos no vendidos
OK=OK
OPEN=ABIERTO
OPEN_DRAWER=ABRIR CAJA
PAY=PAGO
PRINTER_NOT_READY=IMPRESORA NO LISTA
PROMO=PROMOCIONES
QTY=CANTIDAD
RECEIPT_PRINTER_COMMUNICATION_ERROR=Error de comunicaci\u00f3n entre impresora y caja
REPRINT=REIMPRIMIR
RESET_XUI=Reiniciar
Replace=Reemplazar
ReplaceAndDelete=<html><center>Reemplazar y<br>borrar
SALE_DISC=Descuento de ventas
SALE_VOIDED=Venta anulada
SET_REF\#=N\u00famero
SIGN_OUT=Salir
SKU=SKU
Save=Guardar
SaveAndClear=<html><center>Guardar y<br>limpiar
TERMINAL_IS_CLOSED=El terminar est\u00e1 cerrado
TEST_ALERT=Alerta (prueba)
TEST_ALERT_BOX=Pueba de alerta:
TEST_MSR=Tarjeta de cr\u00e9dito
TOTALS=TOTAL
TRANS_RET=TRANS RET
TRANS_SAVE=Guardar transacci\u00f3n
UNKNOWN_CARD_TYPE=Tipo de tarjeta desconocido
VOID_ITEM=Anular art\u00edculo
VOID_SALE=Anular venta
no_sales=No se guardaron ventas
order_not_found=Orden no encontrada
problems_reading_card=Problemas al leer la tarjeta
product_not_found=Producto no encontrado
promo_page=Esta ser\u00e1 la p\u00e1gina de promociones
