# Copyright 2014 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:
#  cldrVersion=25
#  date=$Date: 2014-03-01 06:57:43 +0100 (Sat, 01 Mar 2014) $
#  number=$Revision: 9852 $
#  type=ro
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 din Aruba
AZM = manat azer (1993–2006)|||1
AZN = manat azer
BAD = dinar Bosnia-Herțegovina (1992–1994)|||1
BAM = marcă convertibilă bosniacă
BBD = dolar 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|R$
BRR = cruzeiro brazilian (1993–1994)|||1
BSD = dolar din Bahamas|$
BTN = ngultrum din Bhutan
BUK = kyat birman|||1
BWP = pula Botswana
BYR = rublă belarusă||0
BZD = dolar din Belize|$
CAD = dolar canadian
CDF = franc congolez
CHF = franc elvețian
CLP = peso chilian|$|0
CNY = yuan renminbi chinezesc|¥
COP = peso columbian||0
CRC = colón costarican||0
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||0
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 din Laos||0
LBP = liră libaneză||0
LKR = rupie din Sri Lanka
LRD = dolar liberian
LSL = loti lesothian
LTL = litu lituanian
LUC = franc convertibil luxemburghez|||1
LUF = franc luxemburghez||0|1
LUL = franc financiar luxemburghez|||1
LVL = lats Letonia|||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 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 nou 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 Insulele Solomon|$
SCR = rupie din Seychelles
SDD = dinar sudanez|||1
SDG = liră sudaneză
SDP = liră sudaneză (1957–1998)|||1
SEK = coroană suedeză
SGD = dolar Singapore|$
SHP = liră Insula Sf. Elena
SIT = tolar sloven|||1
SKK = coroană slovacă|||1
SLL = leone Sierra Leone||0
SOS = șiling somalez||0
SRD = dolar surinamez
SRG = gulden Surinam|||1
SSP = liră sud-sudaneză|£
STD = dobra Sao Tome și Principe||0
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ă
TTD = dolar din Trinidad-Tobago|$
TWD = dolar nou din Taiwan|NT$
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 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
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
