/*
 * 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",
        "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)"
    };
  }-*/;
}
