###############################################################################
# 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
CASH=CONTANTE
CASH_DRAWER_COMMUNICATION_ERROR=ERRORE DI COMUNICAZIONE CON REGISTRATORE DI CASSA
CASH_DRAWER_IS_OPEN=REGISTRATORE DI CASSA E' APERTO
CHANGE_PRICE=CAMBIA PREZZO
CHECK=ASSEGNO
CLEAR_ALL=AZZERA TUTTO
CLEAR_CACHE=PULISCI CACHE
CLEAR_ONE=AZZERA UNO
CLOSE=CHIUDE
CLR=PULISCI
CLR_DISC=PULISCI SCONTO
CREDIT=CREDITO
DEL=CANCELLA
ENT=INSERISCI
EXCEPTION=ECCEZIONE
EXIT=ESCI
FINISH=TERMINA
FUNCTION_NOT_YET_SUPPORTED=FUNZIONE NON ANCORA SUPPORTATA
GIFT_CERT=CERTIFICATO OMAGGIO
INVALID_CARD_NUMBER=NUMERO CARTA INVALIDA
ITEM_DISC=SCONTO PRODOTTO
ITEM_MODIFICATION_ERROR=ERRORE MODIFICA PRODOTTO
LANG=LINGUA
LOCK=BLOCCA
MAIN=PRINCIPALE
MANAGER_NOT_LOGGED_IN=MANAGER NON AUTENTICATO
MGR=MGR
MOD=MOD
NOT_ENOUGH_FUNDS=CLIENTE NON FORNISCE ABBASTANZA FONDI PER COMPLETARE QUESTA VENDITA
NO_ITEMS_SOLD=NESSUN PRODOTTO VENDUTO
OPEN=APRE
OPEN_DRAWER=APRI CASSETTO
PAY=PAGARE
PRINTER_NOT_READY=STAMPANTE NON PRONTA
PROMO=PROMO
QTY=QNT
RECEIPT_PRINTER_COMMUNICATION_ERROR=ERRORE COMUNICAZIONE STAMPA RICEVUTA
REPRINT=RISTAMPA
RESET_XUI=AZZERA XUI
SALE_DISC=SCONTO VENDITA
SALE_VOIDED=VENDITA VUOTA
SET_REF\#=IMPOSTA RIF#
SIGN_OUT=SIGN OUT
SKU=CODICE PRODOTTO
TERMINAL_IS_CLOSED=TERMINALE E' CHIUSO
TEST_ALERT=TEST AVVISO
TEST_ALERT_BOX=TEST BOX AVVISO - TESTANDO IL DIALOGO IMPLEMENTAZIONE
TEST_MSR=TEST MSR
TOTALS=TOTALE
TRANS_RET=RITORNA TRANSAZIONE
TRANS_SAVE=SALVA TRANSAZIONE
UNKNOWN_CARD_TYPE=TIPO CARTA SCONOSCIUTA
VOID_ITEM=PRODOTTO VUOTO
VOID_SALE=VENDITA VUOTA
order_not_found=ORDINE NON TROVATO
problems_reading_card=PROBLEMI LEGGENDO LETTORE CARTE
product_not_found=PRODOTTO NON TROVATO
promo_page=Questo sar\u00e0 nella pagina promozione!
