#
# Portions Copyright 2007 Sun Microsystems, Inc.  All Rights Reserved.
#

#
# COPYRIGHT AND PERMISSION NOTICE
#
# Copyright (C) 1991-2007 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of the Unicode data files and any associated documentation (the "Data
# Files") or Unicode software and any associated documentation (the
# "Software") to deal in the Data Files or Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, and/or sell copies of the Data Files or Software, and
# to permit persons to whom the Data Files or Software are furnished to do
# so, provided that (a) the above copyright notice(s) and this permission
# notice appear with all copies of the Data Files or Software, (b) both the
# above copyright notice(s) and this permission notice appear in associated
# documentation, and (c) there is clear notice in each modified Data File or
# in the Software as well as in the documentation associated with the Data
# File(s) or Software that the data or software has been modified.
#
# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
# THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
# INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
# CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THE DATA FILES OR SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder shall not
# be used in advertising or otherwise to promote the sale, use or other
# dealings in these Data Files or Software without prior written
# authorization of the copyright holder.
#
 
# Generated automatically from the Common Locale Data Repository. DO NOT EDIT!

adp=Peseta Andorrana
aed=Dirham degli Emirati Arabi Uniti
afa=Afgani (1927-2002)
afn=Afgani
all=Lek Albanese
amd=Dram Armeno
ang=Fiorino delle Antille Olandesi
aoa=Kwanza Angolano
ars=Peso Argentino
ats=Scellino Austriaco
aud=Dollaro Australiano
awg=Fiorino di Aruba
azm=Manat Azero
bam=Marco Conv. Bosnia-Erzegovina
bbd=Dollaro di Barbados
bdt=Taka Bangladese
bef=Franco Belga
bgl=Lev Bulgaro
bgn=Nuovo Lev Bulgaro
bhd=Dinaro del Bahraini
bif=Franco del Burundi
bmd=Dollaro delle Bermuda
bnd=Dollaro del Brunei
bob=Boliviano
bov=Mvdol Boliviano
brl=Real Brasiliano
bsd=Dollaro delle Bahamas
btn=Ngultrum Butanese
bwp=Pula del Botswana
byb=Nuovo Rublo Bielorussia (1994-1999)
byr=Rublo Bielorussia
bzd=Dollaro Belize
cad=Dollaro Canadese
cdf=Franco Congolese
chf=Franco Svizzero
clf=Unidades de Fomento Chilene
clp=Peso Cileno
cny=Renmimbi Cinese
cop=Peso Colombiano
crc=Col\u00f3n Costaricano
csd=Dinaro serbo
cup=Peso Cubano
cve=Escudo del Capo Verde
cyp=Sterlina Cipriota
czk=Corona Ceca
dem=Marco Tedesco
djf=Franco Gibutiano
dkk=Corona Danese
dop=Peso Dominicano
dzd=Dinaro Algerino
eek=Corona dell\u2019Estonia
egp=Sterlina Egiziana
ern=Nakfa Eritreo
esp=Peseta Spagnola
etb=Birr Etiopico
eur=Euro
fim=Markka Finlandese
fjd=Dollaro delle Figi
fkp=Sterlina delle Falkland
frf=Franco Francese
gbp=Sterlina Inglese
gel=Lari Georgiano
ghc=Cedi del Ghana
gip=Sterlina di Gibilterra
gmd=Dalasi del Gambia
gnf=Franco della Guinea
grd=Dracma Greca
gtq=Quetzal Guatemalteco
gwp=Peso della Guinea-Bissau
gyd=Dollaro della Guyana
hkd=Dollaro di Hong Kong
hnl=Lempira Hoduregno
hrk=Kuna Croata
htg=Gourde Haitiano
huf=Fiorino Ungherese
idr=Rupia Indonesiana
iep=Lira Irlandese
ils=Nuovo sheqel israeliano
inr=Rupia Indiana
iqd=Dinaro Iracheno
irr=Rial Iraniano
isk=Corona Islandese
itl=Lira Italiana
jmd=Dollaro Giamaicano
jod=Dinaro Giordano
jpy=Yen Giapponese
kes=Scellino Keniota
kgs=Som  Kirghiso
khr=Riel Cambogiano
kmf=Franco Comoriano
kpw=Won Nordcoreano
krw=Won Sudcoreano
kwd=Dinaro Kuwaitiano
kyd=Dollaro delle Isole Cayman
kzt=Tenge Kazaco
lak=Kip Laotiano
lbp=Sterlina Libanese
lkr=Rupia di Sri Lanka
lrd=Dollaro Liberiano
lsl=Loti del Lesotho
ltl=Lita Lituana
luf=Franco del Lussemburgo
lvl=Lat Lettone
lyd=Dinaro Libico
mad=Dirham Marocchino
mdl=Leu Moldavo
mga=Ariary Malgascio
mgf=Franco Malgascio
mkd=Dinaro Macedone
mmk=Kyat di Myanmar
mnt=Tugrik Mongolo
mop=Pataca di Macao
mro=Ouguiya della Mauritania
mtl=Lira Maltese
mur=Rupia Mauriziana
mvr=Rufiyaa delle Maldive
mwk=Kwacha Malawiano
mxn=Peso Messicano
mxv=Unidad de Inversion (UDI) Messicana
myr=Ringgit della Malesia
mzm=Metical del Mozambico
nad=Dollaro Namibiano
ngn=Naira Nigeriana
nio=C\u00f3rdoba oro nicaraguense
nlg=Fiorino Olandese
nok=Corona Norvegese
npr=Rupia Nepalese
nzd=Dollaro Neozelandese
omr=Rial Omanita
pab=Balboa di Panama
pen=Sol Nuevo Peruviano
pgk=Kina della Papua Nuova Guinea
php=Peso delle Filippine
pkr=Rupia del Pakistan
pln=Zloty Polacco
pte=Escudo Portoghese
pyg=Guarani del Paraguay
qar=Rial del Qatar
rol=Leu della Romania
rub=Rublo Russo
rur=Rublo della CSI
rwf=Franco Ruandese
sar=Ryal Saudita
sbd=Dollaro delle Isole Solomon
scr=Rupia delle Seychelles
sdd=Dinaro Sudanese
sek=Corona Svedese
sgd=Dollaro di Singapore
shp=Sterlina di Sant\u2019Elena
sit=Tallero Sloveno
skk=Corona Slovacca
sll=Leone della Sierra Leone
sos=Scellino Somalo
srg=Fiorino del Suriname
std=Dobra di Sao Tom\u00e9 e Principe
svc=Col\u00f3n Salvadoregno
syp=Sterlina Siriana
szl=Lilangeni dello Swaziland
thb=Baht Tailandese
tjs=Somoni del Tajikistan
tmm=Manat Turkmeno
tnd=Dinaro Tunisino
top=Pa\u02bbanga di Tonga
tpe=Escudo di Timor
trl=Lira Turca
ttd=Dollaro di Trinidad e Tobago
twd=Nuovo dollaro taiwanese
tzs=Scellino della Tanzania
uah=Hrivna Ucraina
ugx=Scellino Ugandese
usd=Dollaro Statunitense
usn=Dollaro Statunitense (Next day)
uss=Dollaro Statunitense (Same day)
uyu=Peso Uruguayo uruguaiano
uzs=Sum dell\u2019Uzbekistan
veb=Bolivar Venezuelano
vnd=Dong Vietnamita
vuv=Vatu di Vanuatu
wst=Tala della Samoa Occidentale
xaf=Franco CFA BEAC
xau=Oro
xba=Unit\u00e0 composita europea
xbb=Unit\u00e0 monetaria europea
xbc=Unit\u00e0 di acconto europea (XBC)
xbd=Unit\u00e0 di acconto europea (XBD)
xcd=Dollaro dei Caraibi Orientali
xdr=Diritti Speciali di Incasso
xfo=Franco Oro Francese
xfu=Franco UIC Francese
xof=Franco CFA BCEAO
xpf=Franco CFP
xxx=Nessuna valuta
yer=Rial dello Yemen
yum=Dinaro Noviy Yugoslavo
zar=Rand Sudafricano
zmk=Kwacha dello Zambia
zwd=Dollaro dello Zimbabwe
