###############################################################################
# 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=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
CLIENT_PROFILE=CUSTOMER PROFILE
CLOSE=CLOSE
CLR=CLR
CLR_DISC=CLR DISC
CONFIG_ITEM=CONFIG
CREDIT=CREDIT
Cancel=Cancel
Create=Create
DEL=DEL
Delete=Delete
ENT=ENT
EXCEPTION=EXCEPTION
EXIT=EXIT
Edit=Update
FINISH=FINISH
FUNCTION_NOT_YET_SUPPORTED=FUNCTION NOT YET SUPPORTED
GIFT_CERT=GIFT CERT
INVALID_CARD_NUMBER=INVALID CARD NUMBER
INVALID_EXPIRATION_DATE=The expiration date should be 4 digits.
INVALID_SECURITY_CODE=The security code should be 3 or 4 digits.
ITEM_DISC=ITEM DISC
ITEM_MODIFICATION_ERROR=ITEM MODIFICATION ERROR
LANG=LANG
LOAD=LOAD
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
PROMO_CODE=PROMO CODE
QTY=QTY
RECEIPT_PRINTER_COMMUNICATION_ERROR=RECEIPT PRINTER COMMUNICATION ERROR
RECEIPT_SERIALISE_ERROR=RECEIPT SERIALISE 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
SWAP_KEYBOARD=VIRTUAL
Save=Save
SaveAndClear=<html><center>Save and<br>clear current sale
Search=Search
Select=Select
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_A_SALE=VOID A SALE
VOID_ITEM=VOID ITEM
VOID_SALE=VOID SALE
cardClient=Card number
emailClient=Email address
item_not_configurable=The selected item is not configurable.
listClient=Customers list
nameClient=Name
nameContains=Contains
nameEquals=Equals
no_sales=No sales saved
order_not_found=ORDER NOT FOUND
phoneClient=Phone number
problems_reading_card=PROBLEMS READING SWIPED CARD
product_not_found=PRODUCT NOT FOUND
reasonCommentInOut=Comment
tipLoginPwd=* Email address and phone number are also used respectively as login and password
