# 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 = Sameindu Emirríkini dirham
AFN = Afganistan afghani||0
ALL = Albania lek||0
AMD = Armenia dram
ANG = Niðurlonds Karibia gyllin
AOA = Angola kwanza
ARS = Argentina peso
AUD = Avstralskur dollari|A$
AWG = Aruba florin
AZN = Aserbadjan manat
BAM = Bosnia-Hersegovina mark (kann vekslast)
BBD = Barbados dollari
BDT = Bangladesj taka
BGN = Bulgaria lev
BHD = Barein dinar||3
BIF = Burundi frankur||0
BMD = Bermuda dollari
BND = Brunei dollari
BOB = Bolivia boliviano
BRL = Brasilianskur real|R$
BSD = Bahamaoyggjar dollari
BTN = Butan ngultrum
BWP = Botsvana pula
BYN = Hvítarussland ruble
BYR = Hvítarussland ruble (2000–2016)||0|1
BZD = Belis dollari
CAD = Kanada dollari|CA$
CDF = Kongo frankur
CHF = sveisiskur frankur
CLP = Kili peso||0
CNH = kinesiskur yuan (úr landi)|||1
CNY = kinesiskur yuan|CN¥
COP = Kolombia peso
CRC = Kosta Rika colón
CUC = Kuba peso (sum kann vekslast)
CUP = Kuba peso
CVE = Grønhøvdaoyggjar escudo
CZK = Kekkia koruna
DJF = Djibuti frankur||0
DKK = donsk króna|kr
DOP = Dominika peso
DZD = Algeria dinar
EGP = Egyptaland pund
ERN = Eritrea nakfa
ETB = Etiopia birr
EUR = Evra|€
FJD = Fiji dollari
FKP = Falklandsoyggjar pund
GBP = bretsk pund|£
GEL = Georgia lari
GHS = Gana cedi
GIP = Gibraltar pund
GMD = Gambia dalasi
GNF = Guinea frankur||0
GTQ = Guatemala quetzal
GYD = Gujana dollari
HKD = Hong Kong dollari|HK$
HNL = Honduras lempira
HRK = Kroatia kuna
HTG = Haiti gourde
HUF = Ungarn forint
IDR = Indonesia rupiah
ILS = Ísrael new shekel|₪
INR = indiskir rupis|₹
IQD = Irak dinar||0
IRR = iranskir rials||0
ISK = íslendsk króna||0
JMD = Jamaika dollari
JOD = Jordan dinar||3
JPY = japanskur yen|JP¥|0
KES = kenjanskur skillingur
KGS = Kirgisia som
KHR = Kambodja riel
KMF = Komoroyggjar frankur||0
KPW = Norðurkorea won||0
KRW = Suðurkorea won|₩|0
KWD = Kuvait dinar||3
KYD = Caymanoyggjar dollari
KZT = Kasakstan tenge
LAK = Laos kip||0
LBP = Libanon pund||0
LKR = Sri Lanka rupi
LRD = Liberia dollari
LYD = Libya dinar||3
MAD = Marokko dirham
MDL = Moldova leu
MGA = Madagaskar ariary||0
MKD = Makedónia denar
MMK = Myanmar (Burma) kyat||0
MNT = Mongolia tugrik
MOP = Makao pataca
MRO = Móritania ouguiya (1973–2017)||0|1
MRU = Móritania ouguiya
MUR = Móritius rupi
MVR = Maldivoyggjar rufiyaa
MWK = Malavi kwacha
MXN = Meksiko peso|MX$
MYR = Malaisia ringgit
MZN = Mosambik metical
NAD = Namibia dollari
NGN = Nigeria naira
NIO = Nikaragua córdoba
NOK = norsk króna
NPR = Nepal rupi
NZD = Nýsæland dollari|NZ$
OMR = Oman rial||3
PAB = Panama balboa
PEN = Peru sol
PGK = Papua Nýguinea kina
PHP = Filipsoyggjar peso
PKR = Pakistan rupi
PLN = Pólland zloty
PYG = Paraguai guarani||0
QAR = Katar rial
RON = Rumenia leu
RSD = Serbia dinar||0
RUB = Russland ruble
RWF = Ruanda frankur||0
SAR = Saudiarabia riyal
SBD = Salomonoyggjar dollari
SCR = Seyskelloyggjar rupi
SDG = Sudan pund
SEK = svensk króna
SGD = Singapor dollari
SHP = St. Helena pund
SLL = Sierra Leona leone||0
SOS = Somalia skillingur||0
SRD = Surinam dollari
SSP = Suðursudan pund
STD = Sao Tome & Prinsipi dobra (1977–2017)||0|1
STN = Sao Tome & Prinsipi dobra
SYP = Sýria pund||0
SZL = Svasiland lilangeni
THB = Tailand baht
TJS = Tadsjikistan somoni
TMT = Turkmenistan manat
TND = Tunesia dinar||3
TOP = Tonga paʻanga
TRY = Turkaland liri|TL
TTD = Trinidad & Tobago dollari
TWD = Taivan new dollari|NT$
TZS = Tansania skillingur
UAH = Ukraina hryvnia
UGX = Uganda skillingur||0
USD = US dollari|US$
UYU = Uruguai peso
UZS = Usbekistan som
VEF = Venesuela bolívar (2008–2018)|||1
VES = Venesuela bolívar
VND = Vjetnam dong|₫|0
VUV = Vanuatu vatu||0
WST = Samoa tala
XAF = Miðafrika CFA frankur|FCFA|0
XAG = unse sølv|||1
XAU = unse guld|||1
XCD = Eystur Karibia dollari|EC$
XOF = Vesturafrika CFA frankur|CFA|0
XPD = unse palladium|||1
XPF = CFP frankur|CFPF|0
XPT = unse platin|||1
XXX = ókent gjaldoyra|¤||1
YER = Jemen rial||0
ZAR = Suðurafrika rand
ZMW = Sambia kwacha
