#
# Copyright (c) 2005, 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!

aa=afar
ab=abjaso
ae=av\u00e9stico
ak=akan
an=aragon\u00e9s
av=avar
ay=aymara
az=azer\u00ed
ba=bashkir
bh=bihari
bm=bambara
bn=bengal\u00ed
bs=bosnio
ce=checheno
ch=chamorro
cr=cree
cu=eslavo eclesi\u00e1stico
cv=chuvash
dv=divehi
dz=dzongkha
ee=ewe
eu=vasco
ff=fula
fj=fidjiano
fo=fero\u00e9s
fy=fris\u00f3n
gu=gujarati
gv=ga\u00e9lico man\u00e9s
hi=hindi
ho=hiri motu
ht=haitiano
hz=herero
ie=interlingue
ig=igbo
ii=sichuan yi
io=ido
jv=javan\u00e9s
kg=kongo
ki=kikuyu
kj=kuanyama
kk=kazajo
km=jemer
kn=canar\u00e9s
kr=kanuri
ks=cachemiro
ku=kurdo
kv=komi
kw=c\u00f3rnico
ky=kirghiz
lb=luxemburgu\u00e9s
lg=ganda
li=limburgu\u00e9s
lu=luba-katanga
mh=marshal\u00e9s
mr=marathi
nb=bokmal noruego
nd=ndebele septentrional
ng=ndonga
nn=nynorsk noruego
nr=ndebele meridional
nv=navajo
ny=nyanja
oc=occitano (despu\u00e9s del 1500)
oj=ojibwa
os=os\u00e9tico
pi=pali
rm=reto-romance
rn=kiroundi
rw=kinyarwanda
sc=sardo
sd=sindhi
se=sami septentrional
sl=esloveno
sn=shona
ss=siswati
st=sesotho
su=sundan\u00e9s
sw=swahili
tg=tayiko
ti=tigri\u00f1a
tn=setchwana
to=tonga (Islas Tonga)
tw=twi
ty=tahitiano
ug=uigur
uk=ucraniano
uz=uzbeko
ve=venda
vo=volap\u00fck
wa=val\u00f3n
za=zhuang
AN=Antillas Neerlandesas
AX=Islas \u00c5land
BA=Bosnia-Herzegovina
BH=Bahr\u00e9in
CC=Islas Cocos (Keeling)
CX=Isla Navidad
CZ=Rep\u00fablica Checa
EH=S\u00e1hara Occidental
FK=Islas Falkland (Malvinas)
HK=Hong-Kong, Regi\u00f3n administrativa especial de China
KG=Kirguist\u00e1n
KM=Comoras
LC=Saint Lucia
LS=Lesotho
MO=Macao, Regi\u00f3n administrativa especial de China
MW=Malawi
NL=Pa\u00edses Bajos
NU=Isla Niue
PG=Pap\u00faa Nueva Guinea
PK=Pakist\u00e1n
PN=Pitcairn
PS=Territorios Palestinos
PW=Palau
RO=Ruman\u00eda
SA=Arabia Saud\u00ed
SH=Santa Elena
TF=Territorios Australes Franceses
TK=Islas Tokelau
TT=Trinidad y Tabago
VI=Islas V\u00edrgenes de los Estados Unidos
