# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
#
# The original version of this source code and documentation
# is copyrighted and owned by Taligent, Inc., a wholly-owned
# subsidiary of IBM. These materials are provided under terms
# of a License Agreement between Taligent and Sun. This technology
# is protected by multiple US and International patents.
#
# This notice and attribution to Taligent may not be removed.
# Taligent is a registered trademark of Taligent, Inc.


# language names
# key is ISO 639 language code

aa=afar
ab=abjasio
ae=av\u00e9stico
af=afrikaans
ak=akan
am=am\u00e1rico
an=aragon\u00e9s
ar=\u00e1rabe
as=asam\u00e9s
av=avar
ay=aimara
az=azer\u00ed
ba=bashkir
be=bielorruso
bg=b\u00falgaro
bh=bihari
bi=bislama
bm=bambara
bn=bengal\u00ed
bo=tibetano
br=bret\u00f3n
bs=bosnio
ca=catal\u00e1n
ce=checheno
ch=chamorro
co=corso
cr=cree
cs=checo
cu=eslavo eclesi\u00e1stico
cv=chuvash
cy=gal\u00e9s
da=dan\u00e9s
de=alem\u00e1n
dv=divehi
dz=dzongkha
ee=ewe
el=griego
en=ingl\u00e9s
eo=esperanto
es=espa\u00f1ol
et=estonio
eu=vasco
fa=persa
ff=fula
fi=fin\u00e9s
fj=fidjiano
fo=fero\u00e9s
fr=franc\u00e9s
fy=fris\u00f3n
ga=irland\u00e9s
gd=ga\u00e9lico escoc\u00e9s
gl=gallego
gn=guaran\u00ed
gu=gujarati
gv=ga\u00e9lico man\u00e9s
ha=hausa
he=hebreo
hi=hindi
ho=hiri motu
hr=croata
ht=haitiano
hu=h\u00fangaro
hy=armenio
hz=herero
ia=interlingua
id=indonesio
ie=interlingue
ig=igbo
ii=sichuan yi
ik=inupiaq
in=indonesio
io=ido
is=island\u00e9s
it=italiano
iu=inuktitut
iw=hebreo
ja=japon\u00e9s
ji=y\u00eddish
jv=javan\u00e9s
ka=georgiano
kg=kongo
ki=kikuyu
kj=kuanyama
kk=kazajo
kl=groenland\u00e9s
km=jemer
kn=canar\u00e9s
ko=coreano
kr=kanuri
ks=cachemiro
ku=kurdo
kv=komi
kw=c\u00f3rnico
ky=kirghiz
la=lat\u00edn
lb=luxemburgu\u00e9s
lg=ganda
li=limburgu\u00e9s
ln=lingala
lo=laosiano
lt=lituano
lu=luba-katanga
lv=let\u00f3n
mg=malgache
mh=marshal\u00e9s
mi=maor\u00ed
mk=macedonio
ml=malayalam
mn=mongol
mo=moldavo
mr=marathi
ms=malayo
mt=malt\u00e9s
my=birmano
na=nauruano
nb=bokmal noruego
nd=ndebele septentrional
ne=nepal\u00ed
ng=ndonga
nl=neerland\u00e9s
nn=nynorsk noruego
no=noruego
nr=ndebele meridional
nv=navajo
ny=nyanja
oc=occitano
oj=ojibwa
om=oromo
or=oriya
os=os\u00e9tico
pa=punjab\u00ed
pi=pali
pl=polaco
ps=pashto
pt=portugu\u00e9s
qu=quechua
rm=retorrom\u00e1nico
rn=kiroundi
ro=rumano
ru=ruso
rw=kinyarwanda
sa=s\u00e1nscrito
sc=sardo
sd=sindhi
se=sami septentrional
sg=sango
si=cingal\u00e9s
sk=eslovaco
sl=esloveno
sm=samoano
sn=shona
so=somal\u00ed
sq=alban\u00e9s
sr=serbio
ss=siswati
st=sesotho
su=sundan\u00e9s
sv=sueco
sw=swahili
ta=tamil
te=telugu
tg=tayiko
th=tailand\u00e9s
ti=tigri\u00f1a
tk=turcomano
tl=tagalo
tn=setchwana
to=tongano
tr=turco
ts=tsonga
tt=t\u00e1rtaro
tw=twi
ty=tahitiano
ug=uigur
uk=ucraniano
ur=urdu
uz=uzbeko
ve=venda
vi=vietnamita
vo=volap\u00fck
wa=val\u00f3n
wo=uolof
xh=xhosa
yi=y\u00eddish
yo=yoruba
za=zhuang
zh=chino
zu=zul\u00fa

# country names
# key is ISO 3166 country code

AD=Andorra
AE=Emiratos \u00c1rabes Unidos
AF=Afganist\u00e1n
AG=Antigua y Barbuda
AI=Anguila
AL=Albania
AM=Armenia
AN=Antillas Holandesas
AO=Angola
AQ=Ant\u00e1rtida
AR=Argentina
AS=Samoa Americana
AT=Austria
AU=Australia
AW=Aruba
AX=Islas Aland
AZ=Azerbaiy\u00e1n
BA=Bosnia y Hercegovina
BB=Barbados
BD=Bangladesh
BE=B\u00e9lgica
BF=Burkina Faso
BG=Bulgaria
BH=Bahr\u00e1in
BI=Burundi
BJ=Ben\u00edn
BM=Bermudas
BN=Brun\u00e9i
BO=Bolivia
BR=Brasil
BS=Bahamas
BT=But\u00e1n
BV=Isla Bouvet
BW=Botsuana
BY=Bielorrusia
BZ=Belice
CA=Canad\u00e1
CC=Islas Cocos
CD=Rep\u00fablica Democr\u00e1tica del Congo
CF=Rep\u00fablica Centroafricana
CG=Congo
CH=Suiza
CI=Costa de Marfil
CK=Islas Cook
CL=Chile
CM=Camer\u00fan
CN=China
CO=Colombia
CR=Costa Rica
CS=Serbia y Montenegro
CU=Cuba
CV=Cabo Verde
CX=Isla Christmas
CY=Chipre
CZ=Chequia
DE=Alemania
DJ=Yibuti
DK=Dinamarca
DM=Dominica
DO=Rep\u00fablica Dominicana
DZ=Argelia
EC=Ecuador
EE=Estonia
EG=Egipto
EH=Sahara Occidental
ER=Eritrea
ES=Espa\u00f1a
ET=Etiop\u00eda
FI=Finlandia
FJ=Fiyi
FK=Islas Malvinas
FM=Micronesia
FO=Islas Feroe
FR=Francia
GA=Gab\u00f3n
GB=Reino Unido
GD=Granada
GE=Georgia
GF=Guayana Francesa
GH=Ghana
GI=Gibraltar
GL=Groenlandia
GM=Gambia
GN=Guinea
GP=Guadalupe
GQ=Guinea Ecuatorial
GR=Grecia
GS=Islas Georgia del Sur y Sandwich del Sur
GT=Guatemala
GU=Guam
GW=Guinea-Bissau
GY=Guyana
HK=Hong Kong
HM=Islas Heard y McDonald
HN=Honduras
HR=Croacia
HT=Hait\u00ed
HU=Hungr\u00eda
ID=Indonesia
IE=Irlanda
IL=Israel
IN=India
IO=Territorio Brit\u00e1nico del Oc\u00e9ano \u00cdndico
IQ=Iraq
IR=Ir\u00e1n
IS=Islandia
IT=Italia
JM=Jamaica
JO=Jordania
JP=Jap\u00f3n
KE=Kenia
KG=Kirguizist\u00e1n
KH=Camboya
KI=Kiribati
KM=Comores
KN=San Crist\u00f3bal y Nieves
KP=Corea del Norte
KR=Corea del Sur
KW=Kuwait
KY=Islas Caim\u00e1n
KZ=Kazajst\u00e1n
LA=Laos
LB=L\u00edbano
LC=Santa Lucia
LI=Liechtenstein
LK=Sri Lanka
LR=Liberia
LS=Lesoto
LT=Lituania
LU=Luxemburgo
LV=Letonia
LY=Libia
MA=Marruecos
MC=M\u00f3naco
MD=Moldavia
ME=Montenegro
MG=Madagascar
MH=Islas Marshall
MK=Macedonia
ML=Mal\u00ed
MM=Myanmar
MN=Mongolia
MO=Macao
MP=Islas Marianas del Norte
MQ=Martinica
MR=Mauritania
MS=Montserrat
MT=Malta
MU=Mauricio
MV=Maldivas
MW=Malaui
MX=M\u00e9xico
MY=Malasia
MZ=Mozambique
NA=Namibia
NC=Nueva Caledonia
NE=N\u00edger
NF=Isla Norfolk
NG=Nigeria
NI=Nicaragua
NL=Holanda
NO=Noruega
NP=Nepal
NR=Nauru
NU=Niue
NZ=Nueva Zelanda
OM=Om\u00e1n
PA=Panam\u00e1
PE=Per\u00fa
PF=Polinesia Francesa
PG=Pap\u00faa New Guinea
PH=Filipinas
PK=Paquist\u00e1n
PL=Polonia
PM=San Pedro y Miquel\u00f3n
PN=Islas Pitcairn
PR=Puerto Rico
PS=Palestina
PT=Portugal
PW=Palaos
PY=Paraguay
QA=Qatar
RE=Reuni\u00f3n
RO=Rumania
RS=Serbia
RU=Rusia
RW=Ruanda
SA=Arabia Saudita
SB=Islas Salom\u00f3n
SC=Seychelles
SD=Sud\u00e1n
SE=Suecia
SG=Singapur
SH=Santa Helena
SI=Eslovenia
SJ=Svalbard y Jan Mayen
SK=Eslovaquia
SL=Sierra Leona
SM=San Marino
SN=Senegal
SO=Somalia
SR=Surinam
ST=Santo Tom\u00e9 y Pr\u00edncipe
SV=El Salvador
SY=Siria
SZ=Suazilandia
TC=Islas Turcas y Caicos
TD=Chad
TF=Territorios Franceses del Sur
TG=Togo
TH=Tailandia
TJ=Tayikist\u00e1n
TK=Tokelau
TL=Timor Oriental
TM=Turkmenist\u00e1n
TN=T\u00fanez
TO=Tonga
TR=Turqu\u00eda
TT=Trinidad y Tobago
TV=Tuvalu
TW=Taiw\u00e1n
TZ=Tanzania
UA=Ucrania
UG=Uganda
UM=Islas menores alejadas de los Estados Unidos
US=Estados Unidos
UY=Uruguay
UZ=Uzbekist\u00e1n
VA=Ciudad del Vaticano
VC=San Vicente y las Granadinas
VE=Venezuela
VG=Islas V\u00edrgenes Brit\u00e1nicas
VI=Islas V\u00edrgenes Americanas
VN=Vietnam
VU=Vanuatu
WF=Wallis y Futuna
WS=Samoa
YE=Yemen
YT=Mayotte
ZA=Sud\u00e1frica
ZM=Zambia
ZW=Zimbabue
