# Portions Copyright 2005-2007 Sun Microsystems, Inc.  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.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.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=abchasiska
ae=Avestiska
af=afrikaans
ak=Akan
am=amhariska
an=Aragoniska
ar=arabiska
as=assamesiska
av=Avariska
ay=aymara
az=azerbadjanska
ba=bashkir
be=vitryska
bg=bulgariska
bh=bihari
bi=bislama
bm=Bambara
bn=bengaliska
bo=tibetanska
br=bretagnska
bs=Bosniska
ca=katalan
ce=Tjetjenska
ch=Chamorro
co=korsikanksa
cr=Cree
cs=tjeckiska
cu=Kyrkoslaviska
cv=Tjuvasjiska
cy=walesiska
da=danska
de=tyska
dv=Divehi
dz=bhutanska
ee=Ewe
el=grekiska
en=engelska
eo=esperanto
es=spanska
et=estniska
eu=baskiska
fa=persiska
ff=Fulani
fi=finska
fj=fiji
fo=f\u00e4r\u00f6iska
fr=franska
fy=frisiska
ga=irl\u00e4ndska
gd=skotsk gaeliska
gl=galiciska
gn=guarani
gu=gujarati
gv=Manx
ha=hausa
he=hebreiska
hi=hindi
ho=Hirimotu
hr=kroatiska
ht=Haitiska
hu=ungerska
hy=armeniska
hz=Herero
ia=interlingua
id=indonesiska
ie=interlingue
ig=Igbo
ii=Sichuan Yi
ik=inupiak
in=indonesiska
io=Ido
is=isl\u00e4ndska
it=italienska
iu=inuktitut
iw=hebreiska
ja=japanska
ji=jiddish
jv=Javanesiska
ka=georgiska
kg=Kikongo
ki=Kikuyu
kj=Kwanyama
kk=kazakstanska
kl=gr\u00f6nl\u00e4ndska
km=kambodjanska
kn=kannada
ko=koreanska
kr=Kanuri
ks=kashmiriska
ku=kurdiska
kv=Komi
kw=Korniska
ky=kirgisiska
la=latin
lb=Luxemburgiska
lg=Luganda
li=Limburgiska
ln=lingala
lo=laotiska
lt=litauiska
lu=Luba-Katanga
lv=lettiska
mg=malagas
mh=Marshallesiska
mi=maori
mk=makedoniska
ml=malayalam
mn=mongoliska
mo=moldaviska
mr=marathi
ms=malajiska
mt=maltesiska
my=burmesiska
na=nauru
nb=Norska (bokm\u00e5l)
nd=Ndebele (nord)
ne=nepaliska
ng=Ndonga
nl=nederl\u00e4ndska
nn=Nynorska
no=norska
nr=Ndebele (syd)
nv=Navaho
ny=Nyanja
oc=occitan
oj=Odjibwa
om=oromo (afan)
or=oriya
os=Ossetiska
pa=punjabiska
pi=Pali
pl=polska
ps=pashto (pushto)
pt=portugisiska
qu=quechua
rm=r\u00e4tromanska 
rn=kirundi
ro=rum\u00e4nska
ru=ryska
rw=kinyarwanda
sa=sanskrit
sc=Sardiska
sd=sindhi
se=Nordsamiska
sg=sangho
si=singalese
sk=slovakiska
sl=slovenska
sm=samoa
sn=shona
so=somaliska
sq=albanska
sr=serbiska
ss=siswati
st=sesotho
su=sundanesiska
sv=svenska
sw=swahili
ta=tamil
te=telugu
tg=tadjekiska
th=thail\u00e4ndska
ti=tigrinya
tk=turkmeniska
tl=tagalog
tn=setswana
to=tonga
tr=turkiska
ts=tsonga
tt=tatariska
tw=twi
ty=Tahitiska
ug=uighur
uk=ukrainska
ur=urdu
uz=uzbekiska
ve=Venda
vi=vietnamesiska
vo=volapuk
wa=Vallonska
wo=wolof
xh=xhosa
yi=jiddish
yo=yoruba
za=zhuang
zh=kinesiska
zu=zulu

# country names
# key is ISO 3166 country code

AD=Andorra
AE=F\u00f6renade Arabemiraten
AF=Afghanistan
AG=Antigua och Barbuda
AI=Anguilla
AL=Albanien
AM=Armenien
AN=Nederl\u00e4ndska Antillerna 
AO=Angola
AQ=Antarktis
AR=Argentina
AS=Amerikanska Samoa
AT=\u00d6sterrike
AU=Australien
AW=Aruba
AX=\u00c5land
AZ=Azerbadjan
BA=Bosnien och Herzegovina
BB=Barbados
BD=Bangladesh
BE=Belgien
BF=Burkina Faso
BG=Bulgarien
BH=Bahrain
BI=Burundi
BJ=Benin
BM=Bermuda
BN=Brunei
BO=Bolivia
BR=Brasilien
BS=Bahamas
BT=Bhutan
BV=Bouvet\u00f6n
BW=Botswana
BY=Vitryssland
BZ=Belize
CA=Kanada
CC=Cocos\u00f6arna
CD=Demokratiska republiken Kongo
CF=Centralafrikanska republiken
CG=Kongo
CH=Schweiz
CI=Elfenbenskusten
CK=Cook\u00f6arna
CL=Chile
CM=Kamerun
CN=Kina
CO=Colombia
CR=Costa Rica
CS=Serbien och Montenegro
CU=Kuba
CV=Kap Verde
CX=Jul\u00f6n
CY=Cypern
CZ=Tjeckiska republiken
DE=Tyskland
DJ=Djibouti
DK=Danmark
DM=Dominica
DO=Dominikanska republiken
DZ=Algeriet
EC=Ecuador
EE=Estland
EG=Egypten
EH=V\u00e4stra Sahara
ER=Eritrea
ES=Spanien
ET=Etiopien
FI=Finland
FJ=Fiji
FK=Falklands\u00f6arna
FM=Mikronesien
FO=F\u00e4r\u00f6arna
FR=Frankrike
GA=Gabon
GB=Storbritannien
GD=Grenada
GE=Georgien
GF=Franska Guyana
GH=Ghana
GI=Gibraltar
GL=Gr\u00f6nland
GM=Gambia
GN=Guinea
GP=Guadeloupe
GQ=Ekvatorialguinea
GR=Grekland
GS=Sydgeorgien och Sydsandwich\u00f6arna
GT=Guatemala
GU=Guam
GW=Guinea-Bissau
GY=Guyana
HK=Hongkong
HM=Heard\u00f6ch McDonald\u00f6arna
HN=Honduras
HR=Kroatien
HT=Haiti
HU=Ungern
ID=Indonesien
IE=Irland
IL=Israel
IN=Indien
IO=Brittiska territoriet i Indiska Oceanen
IQ=Irak
IR=Iran
IS=Island
IT=Italien
JM=Jamaica
JO=Jordanien
JP=Japan
KE=Kenya
KG=Kirgisistan
KH=Kambodja
KI=Kiribati
KM=Komorerna
KN=Saint Kitts och Nevis
KP=Nordkorea
KR=Sydkorea
KW=Kuwait
KY=Cayman\u00f6arna
KZ=Kazakstan
LA=Laos
LB=Libanon
LC=Saint Lucia
LI=Liechtenstein
LK=Sri Lanka
LR=Liberia
LS=Lesotho
LT=Litauen
LU=Luxemburg
LV=Lettland
LY=Libyen
MA=Marocko
MC=Monaco
MD=Moldavien
ME=Montenegro
MG=Madagaskar
MH=Marshall\u00f6arna
MK=Makedonien
ML=Mali
MM=Myanmar
MN=Mongoliet
MO=Macao
MP=Nordmarianerna
MQ=Martinique
MR=Mauretanien
MS=Montserrat
MT=Malta
MU=Mauritius
MV=Maldiverna
MW=Malawi
MX=Mexiko
MY=Malaysia
MZ=Mo\u00e7ambique
NA=Namibia
NC=Nya Kaledonien
NE=Niger
NF=Norfolk\u00f6n
NG=Nigeria
NI=Nicaragua
NL=Nederl\u00e4nderna
NO=Norge
NP=Nepal
NR=Nauru
NU=Niue
NZ=Nya Zeeland
OM=Oman
PA=Panama
PE=Peru
PF=Franska Polynesien
PG=Papua Nya Guinea
PH=Filippinerna
PK=Pakistan
PL=Polen
PM=Saint Pierre och Miquelon
PN=Pitcairn
PR=Puerto Rico
PS=Palestina
PT=Portugal
PW=Palau
PY=Paraguay
QA=Qatar
RE=R\u00e9union
RO=Rum\u00e4nien
RS=Serbien
RU=Ryssland
RW=Rwanda
SA=Saudiarabien
SB=Salomon\u00f6arna
SC=Seychellerna
SD=Sudan
SE=Sverige
SG=Singapore
SH=Saint Helena
SI=Slovenien
SJ=Svalbard och Jan Mayen
SK=Slovakien
SL=Sierra Leone
SM=San Marino
SN=Senegal
SO=Somalia
SR=Surinam
ST=S\u00e3o Tom\u00e9 och Pr\u00edncipe
SV=El Salvador
SY=Syrien
SZ=Swaziland
TC=Turks- och Caicos\u00f6arna
TD=Tchad
TF=Franska s\u00f6dra territorierna
TG=Togo
TH=Thailand
TJ=Tadzjikistan
TK=Tokelau
TL=Timor-Leste
TM=Turkmenistan
TN=Tunisien
TO=Tonga
TR=Turkiet
TT=Trinidad och Tobago
TV=Tuvalu
TW=Taiwan
TZ=Tanzania
UA=Ukraina
UG=Uganda
UM=F\u00f6renta staternas mindre \u00f6ar i Oceanien och V\u00e4stindien
US=Amerikas F\u00f6renta Stater
UY=Uruguay
UZ=Uzbekistan
VA=Vatikanen
VC=Saint Vincent och Grenadinerna
VE=Venezuela
VG=Brittiska Virgin Islands
VI=Amerikanska Virgin Islands
VN=Vietnam
VU=Vanuatu
WF=Wallis och Futuna
WS=Samoa
YE=Jemen
YT=Mayotte
ZA=Sydafrika 
ZM=Zambia
ZW=Zimbabwe
