###############################################################################
# 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=Ajouter
AmountInOut=Montant
CASH=Esp\u00E8ces
CASH_DRAWER_COMMUNICATION_ERROR=Erreur lors de la communication avec le tiroir caisse
CASH_DRAWER_IS_OPEN=Le tiroir caisse est ouvert
CHANGE_PRICE=Changer le prix
CHECK=Ch\u00E8que
CLEAR_ALL=Tout annuler
CLEAR_CACHE=Annuler l'encours
CLEAR_ONE=Annuler l'article
CLOSE=Fermer
CLR=Effacer
CLR_DISC=Annuler la remise
CREDIT=Cr\u00E9dit
Cancel=Annuler
DEL=Suppr.
Delete=Supprimer
ENT=Valider
EXCEPTION=Exception rencontr\u00E9e
EXIT=Quitter
FINISH=Fin
FUNCTION_NOT_YET_SUPPORTED=Fonction non encore support\u00E9e
GIFT_CERT=Bon d'achat
INVALID_CARD_NUMBER=N\u00B0 de carte non valide
ITEM_DISC=Remise sur l'article
ITEM_MODIFICATION_ERROR=Erreur lors de la modification de l'article
LANG=Langage
LOCK=Bloquer
MAIN=Vente
MANAGER_NOT_LOGGED_IN=Identifiant non g\u00E9rant
MGR=Gestion
MOD=Changer la quantit\u00E9
NOT_ENOUGH_FUNDS=Le client n'a pas fournit assez d'argent pour cl\u00F4turer la vente
NO_ITEMS_SOLD=Aucun article vendu
OK=OK
OPEN=Ouvrir
OPEN_DRAWER=Ouvrir le tiroir
PAID_IN=Retour en caisse
PAID_OUT=Sortie de caisse
PAY=Paiement
PRINTER_NOT_READY=Imprimante de caisse non pr\u00EAte
PROMO=Promos
QTY=Quantit\u00E9
RECEIPT_PRINTER_COMMUNICATION_ERROR=Erreur lors de la communication avec l'imprimante de caisse
REPRINT=R\u00E9afficher
RESET_XUI=R\u00E9initialiser
ReasonInOut=Raison
Replace=Remplacer
ReplaceAndDelete=<html><center>Remplacer et<br>supprimer
SALE_DISC=Remise sur la vente
SALE_VOIDED=Vente annul\u00E9e
SET_REF\#=n\u00B0 ?
SIGN_OUT=Sortir
SKU=Code
Save=Sauver
SaveAndClear=<html><center>Sauver et<br>r\u00E9intialiser la vente
TERMINAL_IS_CLOSED=Le terminal est ferm\u00E9
TEST_ALERT=Alerte (test)
TEST_ALERT_BOX=Test de l'impl\u00E9mentation des alertes
TEST_MSR=Carte de cr\u00E9dit
TOTALS=Totals
TRANS_RET=Recharger une vente
TRANS_SAVE=Sauver la vente
UNKNOWN_CARD_TYPE=Type de carte inconnu
VOID_ITEM=Annuler l'article
VOID_SALE=Annuler la vente
no_sales=Aucune vente sauv\u00E9e
order_not_found=N\u00B0 de transaction inconnu !
problems_reading_card=Probl\u00E8me lors de la lecture de la carte
product_not_found=Produit inconnu !
promo_page=Ce sera la page des promotions...
