###############################################################################
# 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=NUMERAR
CASH_DRAWER_COMMUNICATION_ERROR=EROARE DE COMUNICARE CU REGISTRATORUL DE CASA
CASH_DRAWER_IS_OPEN=REGISTRATORUL DE CASA ESTE DESCHIS
CHANGE_PRICE=SCHIMBA PRETUL
CHECK=CEC
CLEAR_ALL=AZEREAZA TOTUL
CLEAR_CACHE=CURATA NUMERAR
CLEAR_ONE=AZZEREAZA UNUL
CLOSE=INCHIDE
CLR=CURATA
CLR_DISC=CURATA REDUCERE
CREDIT=CREDIT
DEL=STERGE
Delete=
ENT=INTRODUCETI
EXCEPTION=EXCEPTIE
EXIT=IESIRE
FINISH=TERMINARE
FUNCTION_NOT_YET_SUPPORTED=FUNCTIE NE SUPORTATA INCA
GIFT_CERT=CERTIFICAT OMAGIU
INVALID_CARD_NUMBER=NUMAR CARTE INVALID
ITEM_DISC=SCONT PRODUS
ITEM_MODIFICATION_ERROR=EROARE MODIFICARE PRODUS
LANG=LIMBA
LOCK=BLOCHEAZA
MAIN=PRINCIPALA
MANAGER_NOT_LOGGED_IN=MANAGER NE AUTENTIFICA
MGR=MGR
MOD=MOD
NOT_ENOUGH_FUNDS=CLIENTUL NU FURNIZEAZA DESTULE FONDURI PENTRU COMPLETAREA ACESTEI VANZARI
NO_ITEMS_SOLD=NICIUN PRODUS VANDUT
OPEN=DESCHIDE
OPEN_DRAWER=DESCHIDE CASETA
PAY=PLATA
PRINTER_NOT_READY=IMPRIMANTA NU ESTE GATA
PROMO=PROMO
QTY=CANT
RECEIPT_PRINTER_COMMUNICATION_ERROR=EROARE LA PRIMIREA COMUNICARII DE TIPARIRE
REPRINT=RETIPARESTE
RESET_XUI=AZEREAZA XUI
ReplaceAndDelete=
SALE_DISC=SCONT VANZARE
SALE_VOIDED=VANZARE GOALA
SET_REF\#=SETEAZA RIF#
SIGN_OUT=SIGN AUT 
SKU=COD PRODUS
Save=
SaveAndClear=
TERMINAL_IS_CLOSED=TERMINAL INCHIS
TEST_ALERT=TEST AVIZARE
TEST_ALERT_BOX= AVIZ TEST BOX - TESTAND DIALOGUL IMPLEMENTRE
TEST_MSR=TEST MSR
TOTALS=TOTAL
TRANS_RET=RETURNARE TRANZACTIE
TRANS_SAVE=SALVEAZA TRANZACTIA
UNKNOWN_CARD_TYPE=TIP CARTE NECUNOSCUT
VOID_ITEM=PRODUS GOL
VOID_SALE=VANZARE GOALA
order_not_found=COMANDA NEGASITA
problems_reading_card=PROBLEME LA CITIREA CARDULUI
product_not_found= NU GASESTE PRODUSUL 
promo_page=Acesta va fi in pagina de promotie!

