# 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 Yr Emiradau Arabaidd Unedig
AFA = Afghani Afghanistan (1927–2002)|||1
AFN = Afghani Afghanistan||0
ALL = Lek Albania||0
AMD = Dram Armenia||0
ANG = Guilder Antilles yr Iseldiroedd
AOA = Kwanza Angola
AOK = Kwanza Angola (1977–1991)|||1
AON = Kwanza Newydd Angola (1990–2000)|||1
AOR = Kwanza Ailgymhwysedig Angola (1995–1999)|||1
ARA = Austral yr Ariannin|||1
ARL = Peso Ley yr Ariannin (1970–1983)|||1
ARM = Peso yr Ariannin (1881–1970)|||1
ARP = Peso yr Ariannin (1983–1985)|||1
ARS = Peso yr Ariannin
ATS = Swllt Awstria|||1
AUD = Doler Awstralia|A$
AWG = Fflorin Aruba
AZM = Manat Azerbaijan (1993–2006)|||1
AZN = Manat Azerbaijan
BAM = Marc Trosadwy Bosnia a Hercegovina
BBD = Doler Barbados
BDT = Taka Bangladesh
BEC = Ffranc Gwlad Belg (arnewidiol)|||1
BEF = Ffranc Gwlad Belg|||1
BEL = Ffranc Gwlad Belg (ariannol)|||1
BGM = Lev Sosialaidd Bwlgaria|||1
BGN = Lev Bwlgaria
BGO = Lev Bwlgaria (1879–1952)|||1
BHD = Dinar Bahrain||3
BIF = Ffranc Burundi||0
BMD = Doler Bermuda
BND = Doler Brunei
BOB = Boliviano Bolifia
BOL = Boliviano Bolifia (1863–1963)|||1
BOP = Peso Bolifia|||1
BOV = Mvdol Bolifia|||1
BRB = Cruzeiro Newydd Brasil (1967–1986)|||1
BRC = Cruzado Brasil (1986–1989)|||1
BRE = Cruzeiro Brasil (1990–1993)|||1
BRL = Real Brasil|R$
BRN = Cruzado Newydd Brasil (1989–1990)|||1
BRR = Cruzeiro Brasil (1993–1994)|||1
BRZ = Cruzeiro Brasil (1942–1967)|||1
BSD = Doler y Bahamas
BTN = Ngultrum Bhutan
BUK = Kyat Byrma|||1
BWP = Pula Botswana
BYN = Rwbl Belarws
BYR = Rwbl Belarws (2000–2016)||0|1
BZD = Doler Belize
CAD = Doler Canada|CA$
CDF = Ffranc Congo
CHE = Ewro WIR|||1
CHF = Ffranc y Swistir
CHW = Ffranc WIR|||1
CLE = Escudo Chile|||1
CLF = Uned Cyfrifo Chile (UF)||4|1
CLP = Peso Chile||0
CNH = Yuan Tsieina (ar y môr)|||1
CNX = Doler Banc Pobl Tsieina|||1
CNY = Yuan Tsieina|CN¥
COP = Peso Colombia||0
COU = Uned Gwir Werth Colombia|||1
CRC = Colón Costa Rica
CUC = Peso Trosadwy Ciwba
CUP = Peso Ciwba
CVE = Esgwdo Cabo Verde
CYP = Punt Cyprus|||1
CZK = Koruna’r Weriniaeth Tsiec
DDM = Marc Dwyrain yr Almaen|||1
DEM = Marc yr Almaen|||1
DJF = Ffranc Djibouti||0
DKK = Krone Denmarc
DOP = Peso Gweriniaeth Dominica
DZD = Dinar Algeria
ECS = Sucre Ecuador|||1
ECV = Uned Gwerth Gyson Ecuador|||1
EEK = Kroon Estonia|||1
EGP = Punt Yr Aifft
ERN = Nakfa Eritrea
ETB = Birr Ethiopia
EUR = Ewro|€
FIM = Markka’r Ffindir|||1
FJD = Doler Ffiji
FKP = Punt Ynysoedd Falkland/Malvinas
FRF = Ffranc Ffrainc|||1
GBP = Punt Prydain|£
GEK = Kupon Larit Georgia|||1
GEL = Lari Georgia|₾
GHC = Cedi Ghana (1979–2007)|||1
GHS = Cedi Ghana
GIP = Punt Gibraltar
GMD = Dalasi Gambia
GNF = Ffranc Guinée||0
GNS = Syli Guinée|||1
GQE = Ekwele Guinea Gyhydeddol|||1
GTQ = Quetzal Guatemala
GWP = Peso Guiné-Bissau|||1
GYD = Doler Guyana||0
HKD = Doler Hong Kong|HK$
HNL = Lempira Honduras
HRK = Kuna Croatia
HTG = Gourde Haiti
HUF = Fforint Hwngari
IDR = Rupiah Indonesia||0
IEP = Punt Iwerddon|||1
ILP = Punt Israel|||1
ILR = Shegel Israel (1980–1985)|||1
ILS = Shegel Newydd Israel|₪
INR = Rwpî India|₹
IQD = Dinar Irac||0
IRR = Rial Iran||0
ISJ = Króna Gwlad yr Iâ (1918 – 1981)|||1
ISK = Króna Gwlad yr Iâ||0
JMD = Doler Jamaica
JOD = Dinar Gwlad yr Iorddonen||3
JPY = Yen Japan|JP¥|0
KES = Swllt Kenya
KGS = Som Kyrgyzstan
KHR = Riel Cambodia
KMF = Ffranc Comoros||0
KPW = Won Gogledd Corea||0
KRH = Hwan De Corea (1953–1962)|||1
KRO = Won De Corea (1945–1953)|||1
KRW = Won De Corea||0
KWD = Dinar Kuwait||3
KYD = Doler Ynysoedd Cayman
KZT = Tenge Kazakstan
LAK = Kip Laos||0
LBP = Punt Libanus||0
LKR = Rwpî Sri Lanka
LRD = Doler Liberia
LSL = Loti Lesotho
LTL = Litas Lithwania|||1
LTT = Talonas Lithwania|||1
LUF = Ffranc Lwcsembwrg||0|1
LVL = Lats Latfia|||1
LVR = Rwbl Latfia|||1
LYD = Dinar Libya||3
MAD = Dirham Moroco
MAF = Ffranc Moroco|||1
MCF = Ffranc Monaco|||1
MDL = Leu Moldofa
MGA = Ariary Madagascar||0
MGF = Ffranc Madagascar||0|1
MKD = Denar Macedonia
MLF = Ffranc Mali|||1
MMK = Kyat Myanmar||0
MNT = Tugrik Mongolia||0
MOP = Pataca Macau
MRO = Ouguiya Mauritania||0
MUR = Rwpî Mauritius||0
MVP = Rwpî’r Maldives (1947–1981)|||1
MVR = Rufiyaa’r Maldives
MWK = Kwacha Malawi
MXN = Peso Mecsico|MX$
MXP = Peso Arian México (1861–1992)|||1
MXV = Uned Fuddsoddi México|||1
MYR = Ringgit Malaysia
MZE = Escudo Mozambique|||1
MZM = Metical Mozambique (1980–2006)|||1
MZN = Metical Mozambique
NAD = Doler Namibia
NGN = Naira Nigeria
NIC = Córdoba Nicaragua (1988–1991)|||1
NIO = Cordoba Nicaragwa
NLG = Guilder yr Iseldiroedd|||1
NOK = Krone Norwy
NPR = Rwpî Nepal
NZD = Doler Seland Newydd|NZ$
OMR = Rial Oman||3
PAB = Balboa Panama
PEI = Inti Periw|||1
PEN = Sol Periw
PES = Sol Periw (1863–1965)|||1
PGK = Kina Papua Guinea Newydd
PHP = Peso’r Philipinau
PKR = Rwpî Pacistan||0
PLN = Zloty Gwlad Pwyl
PYG = Guarani Paraguay||0
QAR = Rial Qatar
RHD = Doler Rhodesia|||1
RON = Leu Rwmania
RSD = Dinar Serbia||0
RUB = Rwbl Rwsia
RWF = Ffranc Rwanda||0
SAR = Riyal Saudi Arabia
SBD = Doler Ynysoedd Solomon
SCR = Rwpî Seychelles
SDD = Dinar Sudan (1992–2007)|||1
SDG = Punt Sudan
SDP = Punt Sudan (1957–1998)|||1
SEK = Krona Sweden
SGD = Doler Singapore
SHP = Punt St Helena
SLL = Leone Sierra Leone||0
SOS = Swllt Somalia||0
SRD = Doler Surinam
SRG = Guilder Surinam|||1
SSP = Punt De Sudan
STD = Dobra São Tomé a Príncipe||0|1
SVC = Colón El Salvador|||1
SYP = Punt Syria||0
SZL = Lilangeni Gwlad Swazi
THB = Baht Gwlad Thai|฿
TJR = Rwbl Tajikistan|||1
TJS = Somoni Tajikistan
TMM = Manat Turkmenistan (1993–2009)||0|1
TMT = Manat Turkmenistan
TND = Dinar Tunisia||3
TOP = Paʻanga Tonga
TPE = Escudo Timor|||1
TRL = Lira Twrci (1922–2005)||0|1
TRY = Lira Twrci|TL
TTD = Doler Trinidad a Tobago
TWD = Doler Newydd Taiwan|NT$
TZS = Swllt Tanzania||0
UAH = Hryvnia Wcráin
UGS = Swllt Uganda (1966–1987)|||1
UGX = Swllt Uganda||0
USD = Doler UDA|US$
USN = Doler UDA (y diwrnod nesaf)|||1
USS = Doler UDA (yr un diwrnod)|||1
UYP = Peso Uruguay (1975–1993)|||1
UYU = Peso Uruguay
UZS = Som Uzbekistan||0
VEB = Bolívar Venezuela (1871–2008)|||1
VEF = Bolívar Venezuela
VND = Dong Fietnam|₫|0
VNN = Dong Fietnam (1978–1985)|||1
VUV = Vatu Vanuatu||0
WST = Tala Samoa
XAF = Ffranc CFA Canol Affrica|FCFA|0
XAG = Arian|||1
XAU = Aur|||1
XBA = Uned Cyfansawdd Ewropeaidd|||1
XBB = Uned Ariannol Ewropeaidd|||1
XCD = Doler Dwyrain y Caribî|EC$
XEU = Uned Arian Cyfred Ewropeaidd|||1
XOF = Ffranc CFA Gorllewin Affrica|CFA|0
XPD = Paladiwm|||1
XPF = Ffranc CFP|CFPF|0
XPT = Platinwm|||1
XSU = Sucre|||1
XXX = Arian Cyfred Anhysbys|||1
YDD = Dinar Yemen|||1
YER = Rial Yemen||0
ZAL = Rand (ariannol) De Affrica|||1
ZAR = Rand De Affrica
ZMK = Kwacha Zambia (1968–2012)||0|1
ZMW = Kwacha Zambia
ZRN = Zaire Newydd Zaire (1993–1998)|||1
ZRZ = Zaire Zaire (1971–1993)|||1
ZWD = Doler Zimbabwe (1980–2008)||0|1
ZWL = Doler Zimbabwe (2009)|||1
ZWR = Doler Zimbabwe (2008)|||1
