###############################################################################
# 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.
###############################################################################
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
Delete=
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
ReplaceAndDelete=
SALE_DISC=SCONTO VENDITA
SALE_VOIDED=VENDITA VUOTA
SET_REF\#=IMPOSTA RIF#
SIGN_OUT=SIGN OUT
SKU=CODICE PRODOTTO
Save=
SaveAndClear=
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!
