# 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 Emira arab ini
AOA = kwanza angole
AUD = dolar ostralien|A$
BHD = dinar bahreïn||3
BIF = fran burunde||0
BWP = pula ya botswane
CAD = dolar kanadien|CA$
CDF = fran kongole
CHF = fran swis
CNY = yuan renminbi sinwa|CN¥
CVE = eskudo kapverdien
DJF = fran djiboutien||0
DZD = dinar alzerien
EGP = liv ezipsien
ERN = nafka erythreen
ETB = birr etiopien
EUR = euro|€
GBP = liv sterlin|£
GHC = sedi ganeen|||1
GMD = dalasi gambien
GNS = fran gineen|||1
INR = roupi|₹
JPY = yen zapone|JP¥|0
KES = shiling kenyan
KMF = fran komorien||0
LRD = dolar liberien
LSL = loti lezoto
LYD = dinar libien||3
MAD = dirham marokin
MGA = fran malgas||0
MRO = ouguiya moritanien||0
MUR = roupi morisien|Rs|0
MWK = kwacha malawit
MZM = metikal mozanbikin|||1
NAD = dolar namibien
NGN = naira nizerian
RWF = fran rwande||0
SAR = rial saoudien
SCR = roupi seselwa
SDG = dinar soudane
SDP = liv soudane|||1
SHP = liv Sainte-Hélène
SLL = leonn Sierra-Leone||0
SOS = shilingi somalien||0
STD = dobra santomeen||0|1
SZL = lilangeni swazi
TND = dinar tinizien||3
TZS = shiling tanzanien||0
UGX = shiling ougande||0
USD = dolar amerikin|US$
XAF = fran CFA (BEAC)|FCFA|0
XOF = fran CFA (BCEAO)|CFA|0
ZAR = rand sid-afrikin
ZMK = kwacha zanbien (1968–2012)||0|1
ZMW = kwacha zanbien
ZWD = dolar zimbawe||0|1
