#
# Portions Copyright 2005-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!

ab=Abkhaz
am=Amharik
ar=Arab
as=Assam
av=Avarik
az=Azerbaijan
be=Belarusia
bg=Bulgaria
bn=Bengal
bo=Tibet
bs=Bosnia
co=Korsika
cs=Ceko
da=Denmark
de=Jerman
el=Yunani
en=Inggris
es=Spanyol
fa=Persia
fi=Finlandia
fj=Fiji
fo=Faro
fr=Perancis
fy=Frisi
ga=Irlandia
gd=Gaelik Skotlandia
he=Ibrani
hr=Kroasia
hu=Hungaria
hy=Armenia
id=Bahasa Indonesia
in=Bahasa Indonesia
iw=Ibrani
jv=Jawa
kj=Kuanyama
kl=Kalaallisut
ko=Korea
ks=Kashmir
ku=Kurdi
lb=Luxembourg
li=Limburg
lt=Lithuania
mg=Malagasi
mh=Marshall
my=Burma
ne=Nepal
nl=Belanda
ny=Nyanja; Chichewa; Chewa
os=Ossetic
pa=Punjabi
ps=Pashto (Pushto)
pt=Portugis
rm=Rhaeto-Romance
su=Sundan
sv=Swedia
zh=Cina
AD=Andora
AE=Uni Emirat Arab
AG=Antigua dan Barbuda
AN=Antilles Belanda
AQ=Antarktika
AS=Samoa Amerika
BA=Bosnia dan Herzegovina
BE=Belgia
BV=Kepulauan Bouvet
BY=Belarusia
CA=Kanada
CC=Kepulauan Cocos
CD=Republik Demokratik Kongo
CF=Republik Afrika Tengah
CG=Kongo
CH=Swiss
CI=Pantai Gading
CK=Kepulauan Cook
CL=Chili
CM=Kamerun
CN=Cina
CO=Kolombia
CR=Kosta Rika
CU=Kuba
CV=Tanjung Verde
CX=Pulau Christmas
CY=Siprus
CZ=Republik Ceko
DE=Jerman
DJ=Jibouti
DM=Dominika
DO=Republik Dominika
EC=Ekuador
EG=Mesir
EH=Sahara Barat
ES=Spanyol
FI=Finlandia
FK=Kepulauan Falkland
FM=Mikronesia
FO=Kepulauan Faroe
FR=Perancis
GB=Inggris Raya
GF=Guyana Perancis
GQ=Guinea Khatulistiwa
GR=Yunani
GS=Georgia Selatan dan Kepulauan Sandwich Selatan
HK=Hong Kong S.A.R., Cina
HM=Pulau Heard dan Kepulauan McDonald
HR=Kroasia
HU=Hungaria
IE=Irlandia
IS=Islandia
IT=Itali
JM=Jamaika
JO=Yordania
JP=Jepang
KH=Kamboja
KM=Komoros
KN=Saint Kitts dan Nevis
KP=Korea Utara
KR=Korea Selatan
KY=Kepulauan Kayman
LC=Santa Lusia
MA=Maroko
MG=Madagaskar
MH=Kepulauan Marshall
MO=Makao S.A.R. Cina
MP=Kepualuan Mariana Utara
NC=Kaledonia Baru
NF=Kepulauan Norfolk
NO=Norwegia
NZ=Selandia Baru
PF=Polynesia Perancis
PG=Papua Nugini
PH=Filipina
PL=Polandia
PM=Saint Pierre dan Miquelon
PR=Puerto Riko
PS=Otoritas Palestina
PT=Portugis
RE=R\u00e9union
RU=Rusia
SA=Arab Saudi
SB=Kepulauan Solomon
SG=Singapura
SJ=Svalbard dan Jan Mayen
ST=Sao Tome dan Principe
TT=Trinidad dan Tobago
UA=Ukraina
US=Amerika Serikat
VA=Vatikan
VC=Saint Vincent dan Grenadines
VG=Kepulauan British Virgin
VI=Kepulauan U.S. Virgin
WF=Wallis dan Futuna
YE=Yaman
ZA=Afrika Selatan
