# 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

AED = Dirham Uni Emirat Arab
ARS = Peso Argentina|AR$
AUD = Dolar Australia|AU$
BGN = Lev Bulgaria
BND = Dollar Brunei|BN$
BOB = Boliviano|Bs
BRL = Real Brasil|R$
CAD = Dolar Kanada|CA$
CHF = Franc Swiss
CLP = Peso Cile|CL$|0
CNY = Yuan Renminbi|CN¥
COP = Peso Kolombia|CO$|0
CZK = Koruna Cheska|Kč
DEM = Mark Jerman|DM||1
DKK = Krone Denmark|Dkr
EEK = Kroon Estonia|Ekr
EGP = Pound Mesir|EG£
EUR = Euro|€
FJD = Dollar Fiji|FJ$
FRF = Franc Prancis|₣||1
GBP = Pondsterling Inggris|UK£
HKD = Dolar Hong Kong|HK$
HRK = Kuna Kroasia|kn
HUF = Forint Hungaria|Ft|0
IDR = Rupiah Indonesia|Rp|0
ILS = Shekel Israel|₪
INR = Rupee India|Rs.
JPY = Yen Jepang|JP¥|0
KES = Shilling Kenya|Ksh
KRW = Won Korea Selatan|₩|0
LTL = Litas Lithuania|Lt
MAD = Dirham Maroko
MTL = Lira Malta|Lm||1
MXN = Peso Meksiko|MX$
MYR = Ringgit Malaysia|RM
NOK = Kroner Norwegia|Nkr
NZD = Dolar Selandia Baru|NZ$
PEN = Nuevo Sol Peruvian|S/.
PHP = Peso Filipina|Php
PKR = Rupee Pakistan|PKRs|0
PLN = Polandia Zloty|zł
RON = Leu Rumania Baru
RSD = Dinar Serbia|din.|0
RUB = Rubel Rusia
SAR = Real Saudi|SR
SEK = Kronor Swedia|Skr
SGD = Dolar Singapura|S$
SIT = Tolar Slovenia|||1
SKK = Koruna Slovakia|Sk||1
THB = Baht Thailand|฿
TRL = Lira Turki||0|1
TRY = Lira Turki Baru|TL
TWD = Dolar Taiwan Baru|NT$
UAH = Hryvnia Ukrania
USD = Dolar Amerika|US$
VEB = Bolivar Venezuela|||1
VND = Dong Vietnam|₫|0
ZAR = Rand Afrika Selatan|R
