# 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
ADP = pesetă andorrană||0|1
AED = dirham din Emiratele Arabe Unite
AFN = afgani afgan||0
ALL = leka albaneză||0
AMD = dram armenesc||0
ANG = gulden din Antilele Olandeze
AOA = kwanza angoleză
ARP = peso argentinian (1983–1985)|||1
ARS = peso argentinian
ATS = șiling austriac|||1
AUD = dolar australian
AWG = florin aruban
AZM = manat azer (1993–2006)|||1
AZN = manat azer
BAD = dinar Bosnia-Herțegovina (1992–1994)|||1
BAM = marcă convertibilă din Bosnia și Herțegovina
BBD = dolar din Barbados
BDT = taka din Bangladesh
BEC = franc belgian (convertibil)|||1
BEF = franc belgian|||1
BEL = franc belgian (financiar)|||1
BGN = leva bulgărească
BHD = dinar din Bahrain||3
BIF = franc burundez||0
BMD = dolar din Bermuda
BND = dolar din Brunei
BOB = boliviano bolivian
BOP = peso bolivian|||1
BOV = mvdol bolivian|||1
BRE = cruzeiro brazilian (1990–1993)|||1
BRL = real brazilian
BRR = cruzeiro brazilian (1993–1994)|||1
BSD = dolar din Bahamas
BTN = ngultrum din Bhutan
BUK = kyat birman|||1
BWP = pula Botswana
BYN = rublă belarusă
BYR = rublă belarusă (2000–2016)||0|1
BZD = dolar din Belize
CAD = dolar canadian
CDF = franc congolez
CHF = franc elvețian
CLP = peso chilian||0
CNH = yuan chinezesc (offshore)|||1
CNY = yuan chinezesc
COP = peso columbian||0
CRC = colon costarican
CSD = dinar Serbia și Muntenegru (2002–2006)|||1
CUC = peso cubanez convertibil
CUP = peso cubanez
CVE = escudo din Capul Verde
CYP = liră cipriotă|||1
CZK = coroană cehă
DDM = marcă est-germană|||1
DEM = marcă germană|||1
DJF = franc djiboutian||0
DKK = coroană daneză
DOP = peso dominican
DZD = dinar algerian
ECS = sucre Ecuador|||1
EEK = coroană estoniană|||1
EGP = liră egipteană
ERN = nakfa eritreeană
ESA = peseta spaniolă (cont A)|||1
ESB = peseta spaniolă (cont convertibil)|||1
ESP = pesetă spaniolă||0|1
ETB = birr etiopian
EUR = euro
FIM = marcă finlandeză|||1
FJD = dolar fijian
FKP = liră din Insulele Falkland
FRF = franc francez|||1
GBP = liră sterlină
GEL = lari georgian|₾
GHC = cedi Ghana (1979–2007)|||1
GHS = cedi ghanez
GIP = liră din Gibraltar
GMD = dalasi din Gambia
GNF = franc guineean||0
GRD = drahmă grecească|||1
GTQ = quetzal guatemalez
GWP = peso Guineea-Bissau|||1
GYD = dolar guyanez||0
HKD = dolar din Hong Kong
HNL = lempira honduriană
HRD = dinar croat|||1
HRK = kuna croată
HTG = gourde din Haiti
HUF = forint maghiar
IDR = rupie indoneziană||0
IEP = liră irlandeză|||1
ILP = liră israeliană|||1
ILS = șechel israelian nou
INR = rupie indiană
IQD = dinar irakian||0
IRR = rial iranian||0
ISK = coroană islandeză||0
ITL = liră italiană||0|1
JMD = dolar jamaican
JOD = dinar iordanian||3
JPY = yen japonez||0
KES = șiling kenyan
KGS = som kârgâz
KHR = riel cambodgian
KMF = franc comorian||0
KPW = won nord-coreean||0
KRW = won sud-coreean||0
KWD = dinar kuweitian||3
KYD = dolar din Insulele Cayman
KZT = tenge kazahă
LAK = kip laoțian||0
LBP = liră libaneză||0
LKR = rupie srilankeză
LRD = dolar liberian
LSL = loti lesothian
LTL = litu lituanian|||1
LUC = franc convertibil luxemburghez|||1
LUF = franc luxemburghez||0|1
LUL = franc financiar luxemburghez|||1
LVL = lats letonian|||1
LVR = rublă Letonia|||1
LYD = dinar libian||3
MAD = dirham marocan
MAF = franc marocan|||1
MDL = leu moldovenesc
MGA = ariary malgaș||0
MGF = franc Madagascar||0|1
MKD = dinar macedonean
MLF = franc Mali|||1
MMK = kyat din Myanmar||0
MNT = tugrik mongol||0
MOP = pataca din Macao
MRO = ouguiya mauritană||0
MTL = liră malteză|||1
MUR = rupie mauritiană||0
MVR = rufiyaa maldiviană
MWK = kwacha malawiană
MXN = peso mexican
MXP = peso mexican de argint (1861–1992)|||1
MYR = ringgit malaiezian
MZE = escudo Mozambic|||1
MZM = metical Mozambic vechi|||1
MZN = metical mozambican
NAD = dolar namibian
NGN = naira nigeriană
NIC = cordoba nicaraguană (1988–1991)|||1
NIO = cordoba nicaraguană
NLG = gulden olandez|||1
NOK = coroană norvegiană
NPR = rupie nepaleză
NZD = dolar neozeelandez
OMR = rial omanez||3
PAB = balboa panameză
PEI = inti peruvian|||1
PEN = sol peruvian
PES = sol peruvian (1863–1965)|||1
PGK = kina din Papua-Noua Guinee
PHP = peso filipinez
PKR = rupie pakistaneză||0
PLN = zlot polonez
PLZ = zlot polonez (1950–1995)|||1
PYG = guarani paraguayan||0
QAR = rial qatarian
RHD = dolar rhodesian|||1
ROL = leu românesc (1952–2006)|||1
RON = leu românesc
RSD = dinar sârbesc||0
RUB = rublă rusească
RWF = franc rwandez||0
SAR = rial saudit
SBD = dolar din Insulele Solomon
SCR = rupie din Seychelles
SDD = dinar sudanez|||1
SDG = liră sudaneză
SDP = liră sudaneză (1957–1998)|||1
SEK = coroană suedeză
SGD = dolar singaporez
SHP = liră Insula Sf. Elena
SIT = tolar sloven|||1
SKK = coroană slovacă|||1
SLL = leone din Sierra Leone||0
SOS = șiling somalez||0
SRD = dolar surinamez
SRG = gulden Surinam|||1
SSP = liră din Sudanul de Sud
STD = dobra Sao Tome și Principe||0|1
SUR = rublă sovietică|||1
SVC = colon El Salvador|||1
SYP = liră siriană||0
SZL = lilangeni din Swaziland
THB = baht thailandez
TJR = rublă Tadjikistan|||1
TJS = somoni tadjic
TMM = manat turkmen (1993–2009)||0|1
TMT = manat turkmen
TND = dinar tunisian||3
TOP = pa’anga tongană
TRL = liră turcească (1922–2005)||0|1
TRY = liră turcească|TL
TTD = dolar din Trinidad-Tobago
TWD = dolar nou din Taiwan
TZS = șiling tanzanian||0
UAH = hryvna ucraineană
UAK = carboavă ucraineană|||1
UGS = șiling ugandez (1966–1987)|||1
UGX = șiling ugandez||0
USD = dolar american
USN = dolar american (ziua următoare)|||1
USS = dolar american (aceeași zi)|||1
UYP = peso Uruguay (1975–1993)|||1
UYU = peso uruguayan
UZS = sum Uzbekistan||0
VEB = bolivar Venezuela (1871–2008)|||1
VEF = bolivar venezuelean
VND = dong vietnamez||0
VUV = vatu din Vanuatu||0
WST = tala samoană
XAF = franc CFA BEAC|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 din Caraibele de Est
XDR = drepturi speciale de tragere|||1
XEU = unitate de monedă europeană|||1
XFO = franc francez de aur|||1
XFU = franc UIC francez|||1
XOF = franc CFA BCEAO|CFA|0
XPD = paladiu|||1
XPF = franc CFP|CFPF|0
XPT = platină|||1
XTS = cod monetar de test|||1
XXX = monedă necunoscută|||1
YDD = dinar Yemen|||1
YER = rial yemenit||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
ZMK = kwacha zambian (1968–2012)||0|1
ZMW = kwacha zambian
ZRN = zair nou|||1
ZWD = dolar Zimbabwe (1980–2008)||0|1
ZWL = dolar Zimbabwe (2009)|||1
ZWR = dolar Zimbabwe (2008)|||1
