# 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 = dirâm tî âEmirâti tî Arâbo Ôko
AOA = kwânza tî Angoläa
AUD = dolära tî Ostralïi|A$
BHD = dolùara tî Bahrâina||3
BIF = farânga tî Burundïi||0
BWP = pûla tî Botswana
CAD = dolära tî kanadäa|CA$
CDF = farânga tî Kongöo
CHF = farânga tî Sûîsi
CNY = yuan renminbi tî Shîni|CN¥
CVE = eskûêdo tî Kâpo-Vêre
DJF = farânga tî Dibutïi||0
DZD = dinäri tî Alzerïi
EGP = pôndo tî Kâmitâ
ERN = nakafa tî Eritrëe
ETB = bir tî Etiopïi
EUR = zoröo|€
GBP = pôndo tî Anglëe|£
GHC = sêdi tî Ganäa|||1
GMD = dalasi tî gambïi
GNS = sili tî Ginëe|||1
INR = rupïi tî Ênnde|₹
JPY = yêni tî Zapön|JP¥|0
KES = shilîngi tî Kenyäa
KMF = farânga tî Kömôro||0
LRD = dolära tî Liberïa
LSL = loti tî Lesôtho
LYD = dinäar tî Libïi||3
MAD = dirâm tî Marôko
MGA = ariâri tî Madagasikära||0
MRO = ugîya tî Moritanïi (1973–2017)||0|1
MRU = ugîya tî Moritanïi
MUR = rupïi tî Mörîsi
MWK = kwâtia tî Malawïi
MZM = metikala tî Mozambîka|||1
NAD = dolära tî Namibïi
NGN = nâîra tî Nizerïa
RWF = farânga tî Ruandäa||0
SAR = riâli tî Saûdi Arabïi
SCR = rupïi tî Sëyshêle
SDG = pôndo tî Sudäan
SHP = pôndo tî Zûâ Sênt-Helêna
SLL = leône tî Sierâ-Leône||0
SOS = shilîngi tî Somalïi||0
STD = dôbra tî Sâô Tomë na Prinsîpe (1977–2017)||0|1
STN = dôbra tî Sâô Tomë na Prinsîpe
SZL = lilangùeni tî Swazïlânde
TND = dinära tî Tunizïi||3
TZS = shilîngi tî Tanzanïi
UGX = shilîngi tî Ugandäa||0
USD = dol$ara ttî äLetäa-Ôko tî Amerîka|US$
XAF = farânga CFA (BEAC)|FCFA|0
XOF = farânga CFA (BCEAO)|CFA|0
ZAR = rânde tî Mbongo-Afrîka
ZMK = kwâtia tî Zambïi (1968–2012)||0|1
ZMW = kwâtia tî Zambïi
ZWD = dolära tî Zimbäbwe||0|1
