###############################################################################
# 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.
###############################################################################
Add=Add
AmountInOut=Amount
CASH=CASH
CASH_DRAWER_COMMUNICATION_ERROR=CASH DRAWER COMMUNICATION ERROR
CASH_DRAWER_IS_OPEN=CASH DRAWER IS OPEN
CHANGE_PRICE=CHANGE PRICE
CHECK=CHECK
CLEAR_ALL=CLEAR ALL
CLEAR_CACHE=CLEAR CACHE
CLEAR_ONE=CLEAR ONE
CLOSE=CLOSE
CLR=CLR
CLR_DISC=CLR DISC
CREDIT=CREDIT
Cancel=Cancel
DEL=DEL
Delete=Delete
ENT=ENT
EXCEPTION=EXCEPTION
EXIT=EXIT
FINISH=FINISH
FUNCTION_NOT_YET_SUPPORTED=FUNCTION NOT YET SUPPORTED
GIFT_CERT=GIFT CERT
INVALID_CARD_NUMBER=INVALID CARD NUMBER
ITEM_DISC=ITEM DISC
ITEM_MODIFICATION_ERROR=ITEM MODIFICATION ERROR
LANG=LANG
LOCK=LOCK
MAIN=MAIN
MANAGER_NOT_LOGGED_IN=MANAGER NOT LOGGED IN
MGR=MGR
MOD=MOD
NOT_ENOUGH_FUNDS=CUSTOMER DID NOT PROVIDE ENOUGH FUNDS TO COMPLETE THIS SALE
NO_ITEMS_SOLD=NO ITEMS SOLD
OK=OK
OPEN=OPEN
OPEN_DRAWER=OPEN DRAWER
PAID_IN=PAID IN
PAID_OUT=PAID OUT
PAY=PAY
PRINTER_NOT_READY=PRINTER NOT READY
PROMO=PROMO
QTY=QTY
RECEIPT_PRINTER_COMMUNICATION_ERROR=RECEIPT PRINTER COMMUNICATION ERROR
REPRINT=REPRINT
RESET_XUI=RESET XUI
ReasonInOut=Reason
Replace=Replace
ReplaceAndDelete=<html><center>Replace and<br>delete
SALE_DISC=SALE DISC
SALE_VOIDED=SALE VOIDED
SET_REF\#=SET REF#
SIGN_OUT=SIGN OUT
SKU=SKU
Save=Save
SaveAndClear=<html><center>Save and<br>clear current sale
TERMINAL_IS_CLOSED=TERMINAL IS CLOSED
TEST_ALERT=TEST ALERT
TEST_ALERT_BOX=TEST ALERT BOX - TESTING THE DIALOG IMPLEMENTATION
TEST_MSR=TEST MSR
TOTALS=TOTAL
TRANS_RET=LOAD SALE
TRANS_SAVE=SAVE SALE
UNKNOWN_CARD_TYPE=UNKNOWN CARD TYPE
VOID_ITEM=VOID ITEM
VOID_SALE=VOID SALE
no_sales=No sales saved
order_not_found=ORDER NOT FOUND
problems_reading_card=PROBLEMS READING SWIPED CARD
product_not_found=PRODUCT NOT FOUND
promo_page=This will be the promo page!
