# Copyright 2012 Google Inc.
# 
# Licensed 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.

#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag|rounding
# If a symbol is not supplied, the currency code will be used
# If # of decimal digits is omitted, 2 is used
# If a currency is not generally used, not-used-flag=1
# If a currency should be rounded to a multiple of of the least significant
#   digit, rounding will be present
# Trailing empty fields can be omitted

# DO NOT EDIT - GENERATED FROM CLDR DATA
AED = Dirham
AOA = kwanza angoley
AUD = Dolara aostralianina|A$
BHD = dinar bahreïni||3
BIF = Farantsa Borondi||0
BWP = Pola botsoaney
CAD = Dôlara Kanadianina|CA$
CDF = Farantsa kôngôley
CHF = Farantsa soisa
CNY = Yoan sinoa Renminbi|CN¥
CVE = Escudo
DJF = Farantsa Djibotianina||0
DZD = Dinara alzerianina
EGP = vola venty ejipsiana
ERN = Nakfà Eritreanina
ETB = Bir etiopianina
EUR = Eoro|€
GBP = livre sterling|£
GHC = cédi|||1
GMD = Dalasi gambianina
GNS = Farantsa Gineanina|||1
INR = Ropia Indianina|₹
JPY = Yen Japoney|JP¥|0
KES = Shilling kenianina
KMF = Farantsa Komorianina||0
LRD = Dôlara Liberianina
LSL = Loti
LYD = Dinara Libyanina||3
MAD = Dirham marokianina
MGA = Ariary|Ar|0
MRO = Ouguiya moritanianina||0
MUR = Ropia maorisianina||0
MWK = kwacha malawite
MZM = Metikaly|||1
NAD = Dolara namibianina
NGN = Naira nigerianina
RWF = Farantsa Roande||0
SAR = Rial saodianina
SCR = Ropia Seysheloà
SDG = Dinara Sodaney
SDP = livre soudanaise (1956–2007)|||1
SHP = livre de Sainte-Hélène
SLL = Leone||0
SOS = Shilling somalianina||0
STD = Dobra||0|1
SZL = Lilangeni
TND = Dinar tonizianina||3
TZS = Shilling tanzanianina||0
UGX = Shilling ogandianina||0
USD = Dolara amerikanina|US$
XAF = Farantsa CFA (BEAC)|FCFA|0
XOF = Farantsa CFA (BCEAO)|CFA|0
ZAR = Rand afrikanina tatsimo
ZMK = Kwacha zambianina (1968–2012)||0|1
ZMW = Kwacha zambianina
ZWD = Dôlara Zimbaboeanina||0|1
