/*
 * 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 "da" locale.
 */
public class LocalizedNamesImpl_da extends LocalizedNamesImpl {

  @Override
  public String[] loadLikelyRegionCodes() {
    return new String[] {
        "DK",
    };
  }

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "Verden");
    namesMap.put("002", "Afrika");
    namesMap.put("003", "Nordamerika");
    namesMap.put("005", "Sydamerika");
    namesMap.put("009", "Oceanien");
    namesMap.put("011", "Vestafrika");
    namesMap.put("013", "Mellemamerika");
    namesMap.put("014", "Østafrika");
    namesMap.put("015", "Nordafrika");
    namesMap.put("017", "Centralafrika");
    namesMap.put("018", "Det sydlige Afrika");
    namesMap.put("019", "Nord-, Mellem- og Sydamerika");
    namesMap.put("021", "Det nordlige Amerika");
    namesMap.put("029", "Caribien");
    namesMap.put("030", "Østasien");
    namesMap.put("034", "Sydasien");
    namesMap.put("035", "Sydøstasien");
    namesMap.put("039", "Sydeuropa");
    namesMap.put("053", "Australasien");
    namesMap.put("054", "Melanesien");
    namesMap.put("057", "Mikronesiske område");
    namesMap.put("061", "Polynesien");
    namesMap.put("142", "Asien");
    namesMap.put("143", "Centralasien");
    namesMap.put("145", "Vestasien");
    namesMap.put("150", "Europa");
    namesMap.put("151", "Østeuropa");
    namesMap.put("154", "Nordeuropa");
    namesMap.put("155", "Vesteuropa");
    namesMap.put("202", "Subsaharisk Afrika");
    namesMap.put("419", "Latinamerika");
    namesMap.put("AC", "Ascensionøen");
    namesMap.put("AE", "De Forenede Arabiske Emirater");
    namesMap.put("AG", "Antigua og Barbuda");
    namesMap.put("AL", "Albanien");
    namesMap.put("AM", "Armenien");
    namesMap.put("AQ", "Antarktis");
    namesMap.put("AS", "Amerikansk Samoa");
    namesMap.put("AT", "Østrig");
    namesMap.put("AU", "Australien");
    namesMap.put("AX", "Åland");
    namesMap.put("AZ", "Aserbajdsjan");
    namesMap.put("BA", "Bosnien-Hercegovina");
    namesMap.put("BE", "Belgien");
    namesMap.put("BG", "Bulgarien");
    namesMap.put("BL", "Saint Barthélemy");
    namesMap.put("BQ", "De tidligere Nederlandske Antiller");
    namesMap.put("BR", "Brasilien");
    namesMap.put("BV", "Bouvetøen");
    namesMap.put("BY", "Hviderusland");
    namesMap.put("CC", "Cocosøerne");
    namesMap.put("CD", "Congo-Kinshasa");
    namesMap.put("CF", "Den Centralafrikanske Republik");
    namesMap.put("CG", "Congo-Brazzaville");
    namesMap.put("CH", "Schweiz");
    namesMap.put("CI", "Elfenbenskysten");
    namesMap.put("CK", "Cookøerne");
    namesMap.put("CM", "Cameroun");
    namesMap.put("CN", "Kina");
    namesMap.put("CP", "Clippertonøen");
    namesMap.put("CV", "Kap Verde");
    namesMap.put("CX", "Juleøen");
    namesMap.put("CY", "Cypern");
    namesMap.put("CZ", "Tjekkiet");
    namesMap.put("DE", "Tyskland");
    namesMap.put("DK", "Danmark");
    namesMap.put("DO", "Den Dominikanske Republik");
    namesMap.put("DZ", "Algeriet");
    namesMap.put("EA", "Ceuta og Melilla");
    namesMap.put("EE", "Estland");
    namesMap.put("EG", "Egypten");
    namesMap.put("EH", "Vestsahara");
    namesMap.put("ES", "Spanien");
    namesMap.put("ET", "Etiopien");
    namesMap.put("EU", "Den Europæiske Union");
    namesMap.put("EZ", "eurozonen");
    namesMap.put("FK", "Falklandsøerne");
    namesMap.put("FM", "Mikronesien");
    namesMap.put("FO", "Færøerne");
    namesMap.put("FR", "Frankrig");
    namesMap.put("GB", "Storbritannien");
    namesMap.put("GE", "Georgien");
    namesMap.put("GF", "Fransk Guyana");
    namesMap.put("GL", "Grønland");
    namesMap.put("GQ", "Ækvatorialguinea");
    namesMap.put("GR", "Grækenland");
    namesMap.put("GS", "South Georgia og De Sydlige Sandwichøer");
    namesMap.put("HK", "SAR Hongkong");
    namesMap.put("HM", "Heard Island og McDonald Islands");
    namesMap.put("HR", "Kroatien");
    namesMap.put("HU", "Ungarn");
    namesMap.put("IC", "Kanariske øer");
    namesMap.put("ID", "Indonesien");
    namesMap.put("IE", "Irland");
    namesMap.put("IN", "Indien");
    namesMap.put("IO", "Det britiske territorium i Det Indiske Ocean");
    namesMap.put("IQ", "Irak");
    namesMap.put("IS", "Island");
    namesMap.put("IT", "Italien");
    namesMap.put("KG", "Kirgisistan");
    namesMap.put("KH", "Cambodja");
    namesMap.put("KM", "Comorerne");
    namesMap.put("KN", "Saint Kitts og Nevis");
    namesMap.put("KP", "Nordkorea");
    namesMap.put("KR", "Sydkorea");
    namesMap.put("KY", "Caymanøerne");
    namesMap.put("KZ", "Kasakhstan");
    namesMap.put("LB", "Libanon");
    namesMap.put("LC", "Saint Lucia");
    namesMap.put("LT", "Litauen");
    namesMap.put("LV", "Letland");
    namesMap.put("LY", "Libyen");
    namesMap.put("MA", "Marokko");
    namesMap.put("MF", "Saint Martin");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MH", "Marshalløerne");
    namesMap.put("MK", "Makedonien");
    namesMap.put("MN", "Mongoliet");
    namesMap.put("MO", "SAR Macao");
    namesMap.put("MP", "Nordmarianerne");
    namesMap.put("MR", "Mauretanien");
    namesMap.put("MV", "Maldiverne");
    namesMap.put("NC", "Ny Kaledonien");
    namesMap.put("NL", "Holland");
    namesMap.put("NO", "Norge");
    namesMap.put("PF", "Fransk Polynesien");
    namesMap.put("PG", "Papua Ny Guinea");
    namesMap.put("PH", "Filippinerne");
    namesMap.put("PL", "Polen");
    namesMap.put("PM", "Saint Pierre og Miquelon");
    namesMap.put("PN", "Pitcairn");
    namesMap.put("PS", "De palæstinensiske områder");
    namesMap.put("QO", "Ydre Oceanien");
    namesMap.put("RO", "Rumænien");
    namesMap.put("RS", "Serbien");
    namesMap.put("RU", "Rusland");
    namesMap.put("SA", "Saudi-Arabien");
    namesMap.put("SB", "Salomonøerne");
    namesMap.put("SC", "Seychellerne");
    namesMap.put("SE", "Sverige");
    namesMap.put("SI", "Slovenien");
    namesMap.put("SJ", "Svalbard og Jan Mayen");
    namesMap.put("SK", "Slovakiet");
    namesMap.put("SR", "Surinam");
    namesMap.put("SS", "Sydsudan");
    namesMap.put("ST", "São Tomé og Príncipe");
    namesMap.put("SY", "Syrien");
    namesMap.put("TC", "Turks- og Caicosøerne");
    namesMap.put("TD", "Tchad");
    namesMap.put("TF", "De Franske Besiddelser i Det Sydlige Indiske Ocean");
    namesMap.put("TJ", "Tadsjikistan");
    namesMap.put("TN", "Tunesien");
    namesMap.put("TR", "Tyrkiet");
    namesMap.put("TT", "Trinidad og Tobago");
    namesMap.put("UM", "Amerikanske oversøiske øer");
    namesMap.put("UN", "De Forenede Nationer");
    namesMap.put("US", "USA");
    namesMap.put("UZ", "Usbekistan");
    namesMap.put("VA", "Vatikanstaten");
    namesMap.put("VC", "Saint Vincent og Grenadinerne");
    namesMap.put("VG", "De Britiske Jomfruøer");
    namesMap.put("VI", "De Amerikanske Jomfruøer");
    namesMap.put("WF", "Wallis og Futuna");
    namesMap.put("ZA", "Sydafrika");
    namesMap.put("ZZ", "Ukendt område");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "Verden",
        "002": "Afrika",
        "003": "Nordamerika",
        "005": "Sydamerika",
        "009": "Oceanien",
        "011": "Vestafrika",
        "013": "Mellemamerika",
        "014": "Østafrika",
        "015": "Nordafrika",
        "017": "Centralafrika",
        "018": "Det sydlige Afrika",
        "019": "Nord-, Mellem- og Sydamerika",
        "021": "Det nordlige Amerika",
        "029": "Caribien",
        "030": "Østasien",
        "034": "Sydasien",
        "035": "Sydøstasien",
        "039": "Sydeuropa",
        "053": "Australasien",
        "054": "Melanesien",
        "057": "Mikronesiske område",
        "061": "Polynesien",
        "142": "Asien",
        "143": "Centralasien",
        "145": "Vestasien",
        "150": "Europa",
        "151": "Østeuropa",
        "154": "Nordeuropa",
        "155": "Vesteuropa",
        "202": "Subsaharisk Afrika",
        "419": "Latinamerika",
        "AC": "Ascensionøen",
        "AE": "De Forenede Arabiske Emirater",
        "AG": "Antigua og Barbuda",
        "AL": "Albanien",
        "AM": "Armenien",
        "AQ": "Antarktis",
        "AS": "Amerikansk Samoa",
        "AT": "Østrig",
        "AU": "Australien",
        "AX": "Åland",
        "AZ": "Aserbajdsjan",
        "BA": "Bosnien-Hercegovina",
        "BE": "Belgien",
        "BG": "Bulgarien",
        "BL": "Saint Barthélemy",
        "BQ": "De tidligere Nederlandske Antiller",
        "BR": "Brasilien",
        "BV": "Bouvetøen",
        "BY": "Hviderusland",
        "CC": "Cocosøerne",
        "CD": "Congo-Kinshasa",
        "CF": "Den Centralafrikanske Republik",
        "CG": "Congo-Brazzaville",
        "CH": "Schweiz",
        "CI": "Elfenbenskysten",
        "CK": "Cookøerne",
        "CM": "Cameroun",
        "CN": "Kina",
        "CP": "Clippertonøen",
        "CV": "Kap Verde",
        "CX": "Juleøen",
        "CY": "Cypern",
        "CZ": "Tjekkiet",
        "DE": "Tyskland",
        "DK": "Danmark",
        "DO": "Den Dominikanske Republik",
        "DZ": "Algeriet",
        "EA": "Ceuta og Melilla",
        "EE": "Estland",
        "EG": "Egypten",
        "EH": "Vestsahara",
        "ES": "Spanien",
        "ET": "Etiopien",
        "EU": "Den Europæiske Union",
        "EZ": "eurozonen",
        "FK": "Falklandsøerne",
        "FM": "Mikronesien",
        "FO": "Færøerne",
        "FR": "Frankrig",
        "GB": "Storbritannien",
        "GE": "Georgien",
        "GF": "Fransk Guyana",
        "GL": "Grønland",
        "GQ": "Ækvatorialguinea",
        "GR": "Grækenland",
        "GS": "South Georgia og De Sydlige Sandwichøer",
        "HK": "SAR Hongkong",
        "HM": "Heard Island og McDonald Islands",
        "HR": "Kroatien",
        "HU": "Ungarn",
        "IC": "Kanariske øer",
        "ID": "Indonesien",
        "IE": "Irland",
        "IN": "Indien",
        "IO": "Det britiske territorium i Det Indiske Ocean",
        "IQ": "Irak",
        "IS": "Island",
        "IT": "Italien",
        "KG": "Kirgisistan",
        "KH": "Cambodja",
        "KM": "Comorerne",
        "KN": "Saint Kitts og Nevis",
        "KP": "Nordkorea",
        "KR": "Sydkorea",
        "KY": "Caymanøerne",
        "KZ": "Kasakhstan",
        "LB": "Libanon",
        "LC": "Saint Lucia",
        "LT": "Litauen",
        "LV": "Letland",
        "LY": "Libyen",
        "MA": "Marokko",
        "MF": "Saint Martin",
        "MG": "Madagaskar",
        "MH": "Marshalløerne",
        "MK": "Makedonien",
        "MN": "Mongoliet",
        "MO": "SAR Macao",
        "MP": "Nordmarianerne",
        "MR": "Mauretanien",
        "MV": "Maldiverne",
        "NC": "Ny Kaledonien",
        "NL": "Holland",
        "NO": "Norge",
        "PF": "Fransk Polynesien",
        "PG": "Papua Ny Guinea",
        "PH": "Filippinerne",
        "PL": "Polen",
        "PM": "Saint Pierre og Miquelon",
        "PN": "Pitcairn",
        "PS": "De palæstinensiske områder",
        "QO": "Ydre Oceanien",
        "RO": "Rumænien",
        "RS": "Serbien",
        "RU": "Rusland",
        "SA": "Saudi-Arabien",
        "SB": "Salomonøerne",
        "SC": "Seychellerne",
        "SE": "Sverige",
        "SI": "Slovenien",
        "SJ": "Svalbard og Jan Mayen",
        "SK": "Slovakiet",
        "SR": "Surinam",
        "SS": "Sydsudan",
        "ST": "São Tomé og Príncipe",
        "SY": "Syrien",
        "TC": "Turks- og Caicosøerne",
        "TD": "Tchad",
        "TF": "De Franske Besiddelser i Det Sydlige Indiske Ocean",
        "TJ": "Tadsjikistan",
        "TN": "Tunesien",
        "TR": "Tyrkiet",
        "TT": "Trinidad og Tobago",
        "UM": "Amerikanske oversøiske øer",
        "UN": "De Forenede Nationer",
        "US": "USA",
        "UZ": "Usbekistan",
        "VA": "Vatikanstaten",
        "VC": "Saint Vincent og Grenadinerne",
        "VG": "De Britiske Jomfruøer",
        "VI": "De Amerikanske Jomfruøer",
        "WF": "Wallis og Futuna",
        "ZA": "Sydafrika",
        "ZZ": "Ukendt område"
    };
  }-*/;
}
