#
# Copyright (c) 2007, Oracle and/or its affiliates. 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=Andorransk peseta
aed=F\u00f6renade arabemiratens dirham
afa=afro-asiatiskt spr\u00e5k (annat)
all=Albansk lek
amd=Armenisk dram
ang=Nederl\u00e4ndsk antillisk gulden
aoa=Angolansk kwanza
ars=Argentinsk peso
ats=\u00d6sterrikisk schilling
aud=Australisk dollar
awg=Aruba-florin
azm=Azerbajdzjansk manat
bam=Konvertibel bosnisk-hercegovinsk mark
bbd=Barbadisk dollar
bdt=Bangladeshisk taka
bef=Belgisk franc
bgl=Bulgarisk h\u00e5rd lev
bgn=Bulgarisk ny lev
bhd=Bahrainsk dinar
bif=Burundisk franc
bmd=Bermuda-dollar
bnd=Bruneisk dollar
bov=Boliviansk mvdol
brl=Brasiliansk real
bsd=Bahamansk dollar
btn=Bhutanesisk ngultrum
bwp=Botswansk pula
byb=Vitrysk ny rubel (1994-1999)
byr=Vitrysk rubel
bzd=Belizisk dollar
cad=Kanadensisk dollar
cdf=Kongolesisk franc congolais
chf=Schweizisk franc
clf=Chilensk unidad de fomento
clp=Chilensk peso
cny=Kinesisk yuan renminbi
cop=Colombiansk peso
crc=Costarikansk col\u00f3n
cup=Kubansk peso
cve=Kapverdisk escudo
cyp=Cypriotiskt pund
czk=Tjeckisk koruna
dem=Tysk mark
djf=Djiboutisk franc
dkk=Dansk krona
dop=Dominikansk peso
dzd=Algerisk dinar
eek=Estnisk krona
egp=Egyptiskt pund
ern=Eritreansk nakfa
esp=Spansk peseta
etb=Etiopisk birr
eur=Euro
fim=Finsk mark
fjd=Fijiansk dollar
fkp=Falklands\u00f6arnas pund
frf=Fransk franc
gbp=Brittiskt pund sterling
gel=Georgisk lari
ghc=Ghanansk cedi
gip=Gibraltiskt pund
gmd=Gambisk dalasi
gnf=Guineansk franc
grd=Grekisk drachma
gtq=Guatemalansk quetzal
gwp=Guinea-Bissau-peso
gyd=Guyanansk dollar
hkd=Hongkong-dollar
hnl=Hoduransk lempira
hrk=Kroatisk kuna
htg=Haitisk gourde
huf=Ungersk forint
idr=Indonesisk rupiah
iep=Irl\u00e4ndskt pund
ils=Israelisk ny shekel
inr=Indisk rupie
iqd=Irakisk dinar
irr=Iransk rial
isk=Isl\u00e4ndsk krona
itl=Italiensk lira
jmd=Jamaicansk dollar
jod=Jordansk dinar
jpy=Japansk yen
kes=Kenyansk shilling
kgs=Kirgizistansk som
khr=Kambodjansk riel
kmf=Komorisk franc
kpw=Nordkoreansk won
krw=Sydkoreansk won
kwd=Kuwaitisk dinar
kyd=Cayman-dollar
kzt=Kazakisk tenge
lak=Laotisk kip
lbp=Libanesiskt pund
lkr=Srilankesisk rupie
lrd=Liberisk dollar
lsl=Lesothisk loti
ltl=Lettisk lita
luf=Luxemburgsk franc
lvl=Lettisk lats
lyd=Libysk dinar
mad=Marockansk dirham
mdl=Moldavisk leu
mga=Madagaskisk ariary
mgf=Madagaskisk franc
mkd=Makedonisk denar
mmk=Myanmarisk kyat
mnt=Mongolisk tugrik
mop=Macaoisk pataca
mro=Mauretansk ouguiya
mtl=Maltesisk lira
mur=Mauritisk rupie
mvr=Maldivisk rufiyaa
mwk=Malawisk kwacha
mxn=Mexikansk peso
mxv=Mexikansk Unidad de Inversion (UDI)
myr=Malaysisk ringgit
mzm=Mo\u00e7ambikisk metical
nad=Namibisk dollar
ngn=Nigeriansk naira
nio=Nicaraguansk c\u00f3rdoba oro
nlg=Nederl\u00e4ndsk gulden
nok=Norsk krona
npr=Nepalesisk rupie
nzd=Nyzeel\u00e4ndsk dollar
omr=Omansk rial
pab=Panamansk balboa
pen=Peruansk sol nuevo
pgk=Papuansk kina
php=Filippinsk peso
pkr=Pakistansk rupie
pln=Polsk zloty
pte=Portugisisk escudo
pyg=Paraguaysk guarani
qar=Qatarisk rial
rol=Rum\u00e4nsk leu
rub=Rysk rubel
rur=Rysk rubel (1991-1998)
rwf=Rwandisk franc
sar=Saudisk riyal
sbd=Salomon-dollar
scr=Seychellisk rupie
sdd=Sudanesisk dinar
sek=Svensk krona
sgd=Singaporiansk dollar
shp=S\:t Helena-pund
sit=Slovensk tolar
skk=Slovakisk koruna
sll=Sierraleonsk leone
sos=Somalisk shilling
srg=Surinamesisk gulden
std=S\u00e3o Tom\u00e9 och Pr\u00edncipe-dobra
svc=Salvadoransk col\u00f3n
syp=Syriskt pund
szl=Swazil\u00e4ndsk lilangeni
thb=Thail\u00e4ndsk baht
tjs=Tadzjikisk somoni
tmm=Turkmensk manat
tnd=Tunisisk dinar
top=Tongansk pa\u02bbanga
tpe=Timoriansk escudo
trl=Turkisk lira
try=Ny turkisk lira
ttd=Trinidadisk dollar
twd=Taiwanesisk ny dollar
tzs=Tanzanisk shilling
uah=Ukrainsk hryvnia
ugx=Ugandisk shilling
usd=US-dollar
usn=US-dollar (n\u00e4sta dag)
uss=US-dollar (samma dag)
uyu=Uruguayansk peso uruguayo
uzs=Uzbekisk sum
veb=Venezuelansk bolivar
vnd=Vietnamesisk dong
vuv=Vanuatisk vatu
wst=V\u00e4stsamoansk tala
xaf=CFA Franc BEAC
xcd=\u00d6stkaribisk dollar
xfo=Fransk guldfranc
xfu=French UIC-Franc
xof=CFA Franc BCEAO
xpf=CFP-franc
yer=Jemenitisk rial
yum=Dinar (Serbien och Montenegro)
zar=Sydafrikansk rand
zmk=Zambisk kwacha
zwd=Zimbabwisk dollar
