# Do not edit - generated from Unicode CLDR data
#
# The key is an ISO4217 currency code, and the value is of the form:
#   display name|symbol|decimal digits|not-used-flag
# 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
# Trailing empty fields can be omitted

ADP = pesetă andorrană||0|1
AED = dirham Emiratele Arabe Unite
ALL = leka albanez||0
AMD = dram armenesc||0
ANG = gulden Antilele Olandeze|NAf.
ARP = peso argentinian (1983–1985)|||1
ARS = peso argentinian|AR$
ATS = șiling austriac|||1
AUD = dolar australian|AU$
AZN = manat Azerbaidjan|man.
BAD = dinar Bosnia-Herțegovina|||1
BAM = marcă convertibilă bosniacă|KM
BBD = dolar Barbados|Bds$
BDT = taka Bangladeș|Tk
BEC = franc belgian (convertibil)|||1
BEF = franc belgian|BF||1
BEL = franc belgian (financiar)|||1
BGN = leva bulgărească nouă
BIF = franc Burundi|FBu|0
BMD = dolar Bermude|BD$
BND = dolar Brunei|BN$
BOB = bolivian bolivian|Bs
BOP = peso bolivian|$b.||1
BOV = mvdol bolivian|||1
BRE = cruzeiro brazilian (1990–1993)|||1
BRL = real brazilian|R$
BRR = cruzeiro brazilian|||1
BSD = dolar Bahamas|BS$
BTN = ngultrum Bhutan|Nu.
BUK = kyat birman|||1
BYR = rublă bielorusă||0
BZD = dolar Belize|BZ$
CAD = dolar canadian|CA$
CDF = franc congolez
CHF = franc elvețian
CLP = peso chilian|CL$|0
CNY = yuan renminbi chinezesc|CN¥
COP = peso columbian|CO$|0
CRC = colon costarican|₡|0
CSD = dinar vechi Serbia și Muntenegru|||1
CUP = peso cubanez|CU$
CVE = escudo Capul Verde|CV$
CYP = liră cipriotă|CY£||1
CZK = coroană cehă|Kč
DDM = marcă est-germană|||1
DEM = marcă germană|DM||1
DJF = franc Djibouti|Fdj|0
DKK = coroană daneză|Dkr
DOP = peso dominican|RD$
DZD = dinar algerian|DA
ECS = sucre Ecuador|||1
EEK = coroană estoniană|Ekr
EGP = liră egipteană|EG£
ESA = peseta spaniolă (cont A)|||1
ESB = peseta spaniolă (cont convertibil)|||1
ESP = pesetă spaniolă|Pts|0|1
ETB = birr Etiopia|Br
EUR = euro|€
FIM = marcă finlandeză|mk||1
FJD = dolar Fiji|FJ$
FKP = liră Insulele Falkland|FK£
FRF = franc francez|₣||1
GBP = liră sterlină|UK£
GEL = lari Georgia
GHC = cedi Ghana|₵||1
GIP = liră Gibraltar|GI£
GMD = dalasi Gambia
GNF = franc Guineea|FG|0
GRD = drahmă grecească|₯||1
GTQ = quetzal Guatemala
GWP = peso Guineea-Bissau|||1
GYD = dolar Guyana|GY$|0
HKD = dolar Hong Kong|HK$
HNL = lempira Honduras
HRD = dinar croat|||1
HRK = kuna croată|kn
HTG = gourde Haiti
HUF = forint maghiar|Ft|0
IDR = rupie indoneziană|Rp|0
IEP = liră irlandeză|IR£||1
ILP = liră israeliană|I£||1
ILS = șechel israelian nou|₪
INR = rupie indiană|Rs.
IQD = dinar irakian||0
IRR = rial iranian||0
ISK = coroană islandeză|Ikr|0
ITL = liră italiană|IT₤|0|1
JMD = dolar jamaican|J$
JOD = dinar iordanian|JD|3
JPY = yen japonez|JP¥|0
KES = șiling kenyan|Ksh
KGS = som Kirghizstan
KHR = riel cambodgian
KMF = franc comorian|CF|0
KPW = won nord-coreean||0
KRW = won sud-coreean|₩|0
KWD = dinar kuweitian|KD|3
KYD = dolar Insulele Cayman|KY$
LAK = kip Laos|₭|0
LBP = liră libaneză|LB£|0
LKR = rupie Sri Lanka|SLRs
LRD = dolar liberian|L$
LTL = litu lituanian|Lt
LUC = franc convertibil luxemburghez|||1
LUF = franc luxemburghez||0|1
LUL = franc financiar luxemburghez|||1
LVL = lats Letonia|Ls
LVR = rublă Letonia|||1
LYD = dinar libian|LD|3
MAD = dirham marocan
MAF = franc marocan|||1
MDL = leu moldovenesc
MGF = franc Madagascar||0|1
MKD = dinar macedonean
MLF = franc Mali|||1
MMK = kyat Myanmar||0
MNT = tugrik mongol|₮|0
MTL = liră malteză|Lm||1
MXN = peso mexican|MX$
MXP = peso mexican de argint (1861–1992)|||1
MYR = ringgit malaiezian|RM
MZE = escudo Mozambic|||1
MZM = metical Mozambic vechi|Mt||1
MZN = metical Mozambic|MTn
NAD = dolar namibian|N$
NIC = cordoba Nicaragua|||1
NLG = gulden olandez|fl||1
NOK = coroană norvegiană|Nkr
NPR = rupie nepaleză|NPRs
NZD = dolar neozeelandez|NZ$
OMR = riyal Oman||3
PAB = balboa panameză|B/.
PEI = inti peruvian|I/.||1
PEN = sol nou peruvian|S/.
PES = sol peruvian|||1
PGK = kina Papua-Noua Guinee
PHP = peso filipinez|Php
PKR = rupie pakistaneză|PKRs|0
PLN = zlot nou polonez|zł
PLZ = zlot polonez (1950–1995)|||1
PYG = guarani Paraguay|₲|0
QAR = riyal Qatar|QR
RHD = dolar rhodesian|RH$||1
ROL = leu vechi|||1
RON = leu
RSD = dinar sârbesc|din.|0
RUB = rublă rusească
RWF = franc Rwanda||0
SAR = riyal Arabia Saudită|SR
SBD = dolar Insulele Solomon|SI$
SCR = rupie Seychelles|SRe
SDD = dinar sudanez|LSd||1
SDP = liră sudaneză|||1
SEK = coroană suedeză|Skr
SGD = dolar Singapore|S$
SHP = liră Insula Sf. Elena|SH£
SIT = tolar sloven|||1
SKK = coroană slovacă|Sk||1
SLL = leu Sierra Leone|Le|0
SOS = șiling somalez|Ssh|0
SRD = dolar Surinam|SR$
SRG = gulden Surinam|Sf||1
STD = dobra Sao Tome și Principe|Db|0
SUR = rublă sovietică|||1
SVC = colon El Salvador|SV₡||1
SYP = liră siriană|SY£|0
THB = baht thailandez|฿
TJR = rublă Tadjikistan|||1
TND = dinar tunisian|DT|3
TRL = liră turcească||0|1
TRY = liră turcească nouă|TL
TTD = dolar Trinidad-Tobago|TT$
TWD = dolar nou Taiwan|NT$
TZS = șiling tanzanian|TSh|0
UAH = hryvna ucraineană
UAK = carboavă ucraineană|||1
UGS = șiling ugandez (1966–1987)|||1
UGX = șiling ugandez|USh|0
USD = dolar american|US$
USN = dolar american (ziua următoare)|||1
USS = dolar american (aceeași zi)|||1
UYP = peso Uruguay (1975–1993)|||1
UYU = peso nou Uruguay|$U
UZS = sum Uzbekistan||0
VEB = bolivar Venezuela|||1
VND = dong vietnamez|₫|0
XAF = franc Comunitatea Financiară|FCFA|0
XAG = argint|||1
XAU = aur|||1
XBA = unitate compusă europeană|||1
XBB = unitate monetară europeană|||1
XBC = unitate de cont europeană (XBC)|||1
XBD = unitate de cont europeană (XBD)|||1
XCD = dolar Caraibele de Est|EC$
XDR = drepturi speciale de tragere|||1
XEU = unitate de monedă europeană|||1
XFO = franc francez de aur|||1
XFU = franc UIC francez|||1
XPD = paladiu|||1
XPT = platină|||1
XTS = cod monetar de test|||1
XXX = monedă necunoscută sau nevalidă|||1
YDD = dinar Yemen|||1
YER = riyal Yemen|YR|0
YUD = dinar iugoslav greu|||1
YUM = dinar iugoslav nou|||1
YUN = dinar iugoslav convertibil|||1
ZAL = rand sud-african (financiar)|||1
ZAR = rand sud-african|R
ZRN = zair nou|NZ||1
ZWD = dolar Zimbabwe|Z$|0|1
