/*
 * Copyright 2012 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.i18n.client.impl.cldr;

import com.google.gwt.core.client.JavaScriptObject;

// DO NOT EDIT - GENERATED FROM CLDR DATA

/**
 * Localized names for the "kl" locale.
 */
public class LocalizedNamesImpl_kl extends LocalizedNamesImpl {

  @Override
  public String[] loadSortedRegionCodes() {
    return new String[] {
        "AE",
        "AF",
        "AX",
        "AL",
        "DZ",
        "AD",
        "AO",
        "AI",
        "AG",
        "AR",
        "AM",
        "AW",
        "AS",
        "AC",
        "AU",
        "SD",
        "AZ",
        "BS",
        "BH",
        "BD",
        "BB",
        "BE",
        "BZ",
        "BJ",
        "BM",
        "BT",
        "BO",
        "BA",
        "BW",
        "BV",
        "BQ",
        "BR",
        "BN",
        "BG",
        "BF",
        "MM",
        "BI",
        "CA",
        "CV",
        "KY",
        "EA",
        "CF",
        "TD",
        "CL",
        "CI",
        "CP",
        "CC",
        "CO",
        "KM",
        "CK",
        "CR",
        "CW",
        "CY",
        "DK",
        "DG",
        "DJ",
        "DO",
        "DM",
        "EC",
        "EG",
        "SV",
        "ER",
        "EE",
        "ET",
        "EU",
        "EZ",
        "FK",
        "FJ",
        "FI",
        "FR",
        "MF",
        "GA",
        "GM",
        "GE",
        "GF",
        "GH",
        "GI",
        "GQ",
        "GR",
        "GD",
        "GS",
        "GP",
        "GU",
        "GT",
        "GG",
        "GN",
        "GW",
        "GY",
        "HT",
        "HM",
        "NL",
        "HN",
        "HK",
        "BY",
        "IN",
        "ID",
        "IO",
        "IQ",
        "IR",
        "IE",
        "IS",
        "IM",
        "IL",
        "IT",
        "JM",
        "JP",
        "YE",
        "JE",
        "JO",
        "CX",
        "GL",
        "KH",
        "CM",
        "IC",
        "KZ",
        "KE",
        "KG",
        "CN",
        "KI",
        "CG",
        "CD",
        "KP",
        "KR",
        "XK",
        "HR",
        "CU",
        "ZA",
        "SS",
        "KW",
        "LA",
        "LS",
        "LV",
        "LB",
        "LR",
        "LY",
        "LI",
        "LT",
        "LU",
        "MO",
        "MG",
        "MK",
        "MW",
        "MY",
        "ML",
        "MT",
        "MA",
        "MQ",
        "MR",
        "MU",
        "YT",
        "MX",
        "MH",
        "FM",
        "MN",
        "MZ",
        "MD",
        "MC",
        "ME",
        "MS",
        "MP",
        "MV",
        "US",
        "NA",
        "NR",
        "NP",
        "NF",
        "NI",
        "NE",
        "NG",
        "NU",
        "NO",
        "NC",
        "NZ",
        "OM",
        "PK",
        "PW",
        "PA",
        "PG",
        "PY",
        "PE",
        "PF",
        "PH",
        "PN",
        "PL",
        "PT",
        "PS",
        "PR",
        "AQ",
        "QO",
        "QA",
        "RE",
        "RO",
        "RU",
        "RW",
        "EH",
        "BL",
        "SH",
        "KN",
        "LC",
        "PM",
        "WS",
        "SM",
        "ST",
        "SA",
        "FO",
        "SB",
        "SC",
        "CH",
        "SN",
        "RS",
        "SL",
        "SG",
        "SK",
        "SI",
        "SO",
        "ES",
        "LK",
        "SR",
        "SJ",
        "SE",
        "SZ",
        "SX",
        "SY",
        "TW",
        "TJ",
        "TZ",
        "TC",
        "TF",
        "TH",
        "TL",
        "CZ",
        "TG",
        "TK",
        "TO",
        "TT",
        "TA",
        "GB",
        "TN",
        "TM",
        "TV",
        "TR",
        "DE",
        "UG",
        "UA",
        "UM",
        "UN",
        "HU",
        "UY",
        "UZ",
        "VU",
        "VA",
        "VC",
        "VE",
        "VG",
        "VI",
        "VN",
        "WF",
        "XA",
        "XB",
        "ZM",
        "ZW",
        "AT",
    };
  }

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "silarsuaq");
    namesMap.put("002", "Afrika");
    namesMap.put("003", "Amerika Avannarleq");
    namesMap.put("005", "Amerika Kujalleq");
    namesMap.put("011", "Afrika Killiit");
    namesMap.put("013", "America Qitiusumik");
    namesMap.put("014", "Afrika Kangilliit");
    namesMap.put("015", "Afrika Avannarleq");
    namesMap.put("017", "Afrika Qitiusumik");
    namesMap.put("018", "Afrika Kujalleq");
    namesMap.put("019", "Amerika");
    namesMap.put("030", "Asia Kangilliit");
    namesMap.put("034", "Asia Kujalleq");
    namesMap.put("039", "Europa Kujalleq");
    namesMap.put("053", "Australia aamma Nutaaq Zeelandi");
    namesMap.put("143", "Asia Qitiusumik");
    namesMap.put("145", "Asia Killiit");
    namesMap.put("150", "Europa");
    namesMap.put("151", "Europa Kangilliit");
    namesMap.put("154", "Europa Avannarleq");
    namesMap.put("155", "Europa Killiit");
    namesMap.put("419", "America Latin aamma Karibia");
    namesMap.put("AC", "Ascension qeqertaq");
    namesMap.put("AF", "Afghanistani");
    namesMap.put("AG", "Antigua aamma Barbuda");
    namesMap.put("AQ", "Qalasersuaq Kujalleq");
    namesMap.put("AT", "Østrigi");
    namesMap.put("AX", "Ålandi");
    namesMap.put("BA", "Bosnia aamma Herzegovina");
    namesMap.put("BE", "Belgia");
    namesMap.put("BL", "Saint Barthélemy");
    namesMap.put("BV", "Bouvet qeqertaq");
    namesMap.put("BY", "Hvideruslandi");
    namesMap.put("CC", "Cocos qeqertaq");
    namesMap.put("CD", "Kongo-Kinshasa");
    namesMap.put("CG", "Kongo-Brazzaville");
    namesMap.put("CH", "Schweizi");
    namesMap.put("CK", "Cook qeqertaq");
    namesMap.put("CM", "Kamerun");
    namesMap.put("CN", "Kina");
    namesMap.put("CP", "Clipperton qeqertaq");
    namesMap.put("CU", "Kuba");
    namesMap.put("CV", "Cap Verde");
    namesMap.put("CX", "Jul-qeqertaq");
    namesMap.put("CY", "Cypern");
    namesMap.put("CZ", "Tjekkia");
    namesMap.put("DE", "Tysklandi");
    namesMap.put("DK", "Danmarki");
    namesMap.put("DZ", "Algeriet");
    namesMap.put("EA", "Ceuta aamma Melilla");
    namesMap.put("EE", "Estlandi");
    namesMap.put("EG", "Egypten");
    namesMap.put("EH", "Sahara Killiit");
    namesMap.put("ES", "Spania");
    namesMap.put("EU", "Europami nunat kattusimaffiat");
    namesMap.put("FI", "Finlandi");
    namesMap.put("FK", "Falklandi qeqertaq");
    namesMap.put("FO", "Savalimmiut");
    namesMap.put("FR", "Frankrigi");
    namesMap.put("GB", "Tuluit Nunaat");
    namesMap.put("GL", "Kalaallit Nunaat");
    namesMap.put("GR", "Grækenlandi");
    namesMap.put("HK", "Hongkong");
    namesMap.put("HR", "Kroatia");
    namesMap.put("HU", "Ungarni");
    namesMap.put("IC", "Kanaria qeqertaq");
    namesMap.put("IE", "Irlandi");
    namesMap.put("IQ", "Irak");
    namesMap.put("IS", "Islandi");
    namesMap.put("IT", "Italia");
    namesMap.put("JO", "Jordani");
    namesMap.put("JP", "Japani");
    namesMap.put("KH", "Kambodia");
    namesMap.put("KN", "Saint Kitts aamma Nevis");
    namesMap.put("KP", "Korea Avannarleq");
    namesMap.put("KR", "Korea Kujalleq");
    namesMap.put("KY", "Cayman qeqertaq");
    namesMap.put("KZ", "Kasakhstani");
    namesMap.put("LB", "Libanon");
    namesMap.put("LC", "Saint Lucia");
    namesMap.put("LI", "Liechtensteini");
    namesMap.put("LT", "Litaueni");
    namesMap.put("LV", "Letlandi");
    namesMap.put("MA", "Marocko");
    namesMap.put("MF", "Frankrigi Saint Martin");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MK", "Makedonia");
    namesMap.put("MM", "Burma");
    namesMap.put("MO", "Macao");
    namesMap.put("MX", "Mexiko");
    namesMap.put("MZ", "Moçambique");
    namesMap.put("NC", "Nutaaq Caledonia");
    namesMap.put("NL", "Hollandi");
    namesMap.put("NO", "Norge");
    namesMap.put("NZ", "Nutaaq Zeelandi");
    namesMap.put("PG", "Papua Nutaaq Guinea");
    namesMap.put("PK", "Pakistani");
    namesMap.put("PL", "Poleni");
    namesMap.put("PM", "Saint Pierre aamma Miquelon");
    namesMap.put("PT", "Portugali");
    namesMap.put("QA", "Quatar");
    namesMap.put("RO", "Rumænia");
    namesMap.put("RU", "Ruslandi");
    namesMap.put("SD", "Avannarleqsudan");
    namesMap.put("SE", "Sverige");
    namesMap.put("SH", "Saint Helena");
    namesMap.put("SJ", "Svalbard aamma Jan Mayen");
    namesMap.put("SS", "Kujalleqsudan");
    namesMap.put("ST", "São Tomé aamma Príncipe");
    namesMap.put("SZ", "Swazilandi");
    namesMap.put("TH", "Thailandi");
    namesMap.put("TJ", "Tajikistani");
    namesMap.put("TL", "Timor Kangilliit");
    namesMap.put("TM", "Turkmenistani");
    namesMap.put("TR", "Tyrkia");
    namesMap.put("TT", "Trinidad aamma Tobago");
    namesMap.put("UA", "Ukraina");
    namesMap.put("US", "Naalagaaffeqatigiit");
    namesMap.put("UZ", "Uzbekistani");
    namesMap.put("VA", "Vatikani");
    namesMap.put("WF", "Wallis aamma Futuna");
    namesMap.put("YE", "Jemen");
    namesMap.put("ZA", "Kujalleqafrika");
    namesMap.put("ZZ", "(atorsinnaanngitsoq nunap imartaa nunataalu)");
  }

  @Override
  protected JavaScriptObject loadNameMapNative() {
    return overrideMap(super.loadNameMapNative(), loadMyNameMap());
  }

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "silarsuaq",
        "002": "Afrika",
        "003": "Amerika Avannarleq",
        "005": "Amerika Kujalleq",
        "011": "Afrika Killiit",
        "013": "America Qitiusumik",
        "014": "Afrika Kangilliit",
        "015": "Afrika Avannarleq",
        "017": "Afrika Qitiusumik",
        "018": "Afrika Kujalleq",
        "019": "Amerika",
        "030": "Asia Kangilliit",
        "034": "Asia Kujalleq",
        "039": "Europa Kujalleq",
        "053": "Australia aamma Nutaaq Zeelandi",
        "143": "Asia Qitiusumik",
        "145": "Asia Killiit",
        "150": "Europa",
        "151": "Europa Kangilliit",
        "154": "Europa Avannarleq",
        "155": "Europa Killiit",
        "419": "America Latin aamma Karibia",
        "AC": "Ascension qeqertaq",
        "AF": "Afghanistani",
        "AG": "Antigua aamma Barbuda",
        "AQ": "Qalasersuaq Kujalleq",
        "AT": "Østrigi",
        "AX": "Ålandi",
        "BA": "Bosnia aamma Herzegovina",
        "BE": "Belgia",
        "BL": "Saint Barthélemy",
        "BV": "Bouvet qeqertaq",
        "BY": "Hvideruslandi",
        "CC": "Cocos qeqertaq",
        "CD": "Kongo-Kinshasa",
        "CG": "Kongo-Brazzaville",
        "CH": "Schweizi",
        "CK": "Cook qeqertaq",
        "CM": "Kamerun",
        "CN": "Kina",
        "CP": "Clipperton qeqertaq",
        "CU": "Kuba",
        "CV": "Cap Verde",
        "CX": "Jul-qeqertaq",
        "CY": "Cypern",
        "CZ": "Tjekkia",
        "DE": "Tysklandi",
        "DK": "Danmarki",
        "DZ": "Algeriet",
        "EA": "Ceuta aamma Melilla",
        "EE": "Estlandi",
        "EG": "Egypten",
        "EH": "Sahara Killiit",
        "ES": "Spania",
        "EU": "Europami nunat kattusimaffiat",
        "FI": "Finlandi",
        "FK": "Falklandi qeqertaq",
        "FO": "Savalimmiut",
        "FR": "Frankrigi",
        "GB": "Tuluit Nunaat",
        "GL": "Kalaallit Nunaat",
        "GR": "Grækenlandi",
        "HK": "Hongkong",
        "HR": "Kroatia",
        "HU": "Ungarni",
        "IC": "Kanaria qeqertaq",
        "IE": "Irlandi",
        "IQ": "Irak",
        "IS": "Islandi",
        "IT": "Italia",
        "JO": "Jordani",
        "JP": "Japani",
        "KH": "Kambodia",
        "KN": "Saint Kitts aamma Nevis",
        "KP": "Korea Avannarleq",
        "KR": "Korea Kujalleq",
        "KY": "Cayman qeqertaq",
        "KZ": "Kasakhstani",
        "LB": "Libanon",
        "LC": "Saint Lucia",
        "LI": "Liechtensteini",
        "LT": "Litaueni",
        "LV": "Letlandi",
        "MA": "Marocko",
        "MF": "Frankrigi Saint Martin",
        "MG": "Madagaskar",
        "MK": "Makedonia",
        "MM": "Burma",
        "MO": "Macao",
        "MX": "Mexiko",
        "MZ": "Moçambique",
        "NC": "Nutaaq Caledonia",
        "NL": "Hollandi",
        "NO": "Norge",
        "NZ": "Nutaaq Zeelandi",
        "PG": "Papua Nutaaq Guinea",
        "PK": "Pakistani",
        "PL": "Poleni",
        "PM": "Saint Pierre aamma Miquelon",
        "PT": "Portugali",
        "QA": "Quatar",
        "RO": "Rumænia",
        "RU": "Ruslandi",
        "SD": "Avannarleqsudan",
        "SE": "Sverige",
        "SH": "Saint Helena",
        "SJ": "Svalbard aamma Jan Mayen",
        "SS": "Kujalleqsudan",
        "ST": "São Tomé aamma Príncipe",
        "SZ": "Swazilandi",
        "TH": "Thailandi",
        "TJ": "Tajikistani",
        "TL": "Timor Kangilliit",
        "TM": "Turkmenistani",
        "TR": "Tyrkia",
        "TT": "Trinidad aamma Tobago",
        "UA": "Ukraina",
        "US": "Naalagaaffeqatigiit",
        "UZ": "Uzbekistani",
        "VA": "Vatikani",
        "WF": "Wallis aamma Futuna",
        "YE": "Jemen",
        "ZA": "Kujalleqafrika",
        "ZZ": "(atorsinnaanngitsoq nunap imartaa nunataalu)"
    };
  }-*/;
}
