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

#Copyright (C) 1991-2012 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!
#
af=afrikaans
ce=chechene
cs=checo
et=est\u00f3nio
hi=Hindi
hy=arm\u00e9nio
ig=igbo
ik=Inupiaq
jv=jv
mk=maced\u00f3nio
oc=proven\u00e7al
os=oss\u00e9tico
pl=polaco
rm=Romanche
ta=T\u00e2mil
tg=tajique
to=tonga
afa=Afeghani (1927-2002)
ang=Florim das Antilhas Holandesas
art=idioma artifical
awa=Awadhi
bad=Dinar da B\u00f3snia-Herzeg\u00f3vina
bai=bamileke Languages
bam=Marco b\u00f3snio-herzeg\u00f3vino convers\u00edvel
bug=Buginese
cad=D\u00f3lar canadiano
cel=idioma c\u00e9ltico
chn=jarg\u00e3o chinook
cpe=crioulo ou pidgin do ingl\u00eas
cpf=crioulo ou pidgin do franc\u00eas
cpp=crioulo ou pidgin do portugu\u00eas
cus=idioma cuchita
dra=idioma drav\u00edtico
dyu=diula
egy=eg\u00edpcio cl\u00e1ssico
enm=ingl\u00eas medieval
fiu=idioma ugro-fin\u00eas
frm=franc\u00eas medieval
frs=fr\u00edsio oriental
gmh=alem\u00e3o medieval alto
grc=grego cl\u00e1ssico
gsw=alem\u00e3o da Su\u00ed\u00e7a
hsb=sorbiano superior
iba=Iban
khi=khoisan
lez=lezghiano
mga=irland\u00eas, medieval (900-1200)
nah=Nauatle
nds=baixo alem\u00e3o
nic=C\u00f3rdoba nicaraguano
non=norse, old
peo=persa arcaico (aprox. 600-400 a.C.)
pra=idioma pr\u00e1cito
pro=proven\u00e7al, arcaico (at\u00e9 1500)
rom=roman\u00eas
sai=idioma ind\u00edgeno sul-americano
sal=salishan languages
sgn=linguages de sinais
ssa=idioma nilo-sariano
tai=idioma tail\u00e2ndes
tet=T\u00e9tum
tog=togan\u00eas
tyv=tuviniano
wen=idioma s\u00f3rbio
Armn=arm\u00e9nio
Blis=s\u00edmbolos Bliss
Egyd=eg\u00edpcio dem\u00f3tico
Egyh=eg\u00edpcio hier\u00e1tico
Inds=indus
Laoo=Lao
Lina=linear A
Linb=linear B
Sylo=siloti nagri
Tale=tai le
Taml=tamil
Telu=telugu
Xsux=cuneiforme sumero-acadiano
Zxxx=n\u00e3o escrito
Zzzz=inv\u00e1lido ou desconhecido
AE=Emiratos \u00c1rabes Unidos
AI=Anguila
AM=Arm\u00e9nia
AQ=Ant\u00e1rctica
AX=Ilhas \u00c5land
BF=Burkina-Faso
BH=Bahrein
BJ=Benim
BW=Botswana
BY=Bielorr\u00fassia
CC=Ilhas Cocos
CG=Congo-Brazzaville
CM=Camar\u00f5es
CX=Ilha do Natal
CZ=Rep\u00fablica Checa
EE=Est\u00f3nia
EG=Egipto
EH=Sara Ocidental
FK=Ilhas Falkland
FM=Estados Federados da Micron\u00e9sia
FO=Ilhas Faro\u00e9
GL=Gronel\u00e2ndia
GW=Guin\u00e9-Bissau
HK=Regi\u00e3o Administrativa Especial de Hong Kong
IR=Ir\u00e3o
KE=Qu\u00e9nia
KG=Quirguizist\u00e3o
KN=Saint Kitts e Nevis
KY=Ilhas Caim\u00e3o
KZ=Cazaquist\u00e3o
LA=Laos, Rep\u00fablica Popular Democr\u00e1tica do
LV=Let\u00f3nia
MC=M\u00f3naco
MD=Mold\u00e1via, Rep\u00fablica da
MG=Madag\u00e1scar
MK=Maced\u00f3nia
MM=Mianmar
MO=Regi\u00e3o Administrativa Especial de Macau
MP=Ilhas Mariana do Norte
MS=Monserrate
MU=Maur\u00edcias
NC=Nova Caled\u00f3nia
NL=Pa\u00edses Baixos
PG=Papu\u00e1sia-Nova Guin\u00e9
PL=Pol\u00f3nia
PS=Territ\u00f3rio Palestiniano
QA=Qatar
RO=Rom\u00e9nia
SC=Seicheles
SG=Singapura
SI=Eslov\u00e9nia
SM=S\u00e3o Marino
TC=Ilhas Turcas e Caicos
TJ=Tajiquist\u00e3o
TM=Turquemenist\u00e3o
TT=Trindade e Tobago
UZ=Usbequist\u00e3o
VI=Ilhas Virgens E.U.A.
VN=Vietname
YE=I\u00e9men
ZW=Zimbabwe
009=Oce\u00e2nia
015=Norte de \u00c1frica
035=Sudeste Asi\u00e1tico
154=Europa do Norte
