/*
 * 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",
        "CF",
        "EA",
        "CL",
        "CP",
        "CC",
        "CO",
        "KM",
        "CG",
        "CD",
        "CK",
        "CR",
        "CI",
        "CU",
        "CW",
        "CY",
        "DK",
        "VI",
        "VG",
        "TF",
        "DO",
        "EU",
        "PS",
        "IO",
        "DG",
        "DJ",
        "DM",
        "EC",
        "EG",
        "SV",
        "ER",
        "EE",
        "ET",
        "FK",
        "FJ",
        "PH",
        "FI",
        "AE",
        "FR",
        "GF",
        "PF",
        "FO",
        "GA",
        "GM",
        "GE",
        "GH",
        "GI",
        "GD",
        "GR",
        "GL",
        "GP",
        "GU",
        "GT",
        "GG",
        "GN",
        "GW",
        "GY",
        "HT",
        "HM",
        "NL",
        "AN",
        "HN",
        "HK",
        "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",
        "MO",
        "MG",
        "MK",
        "MW",
        "MY",
        "MV",
        "ML",
        "MT",
        "MA",
        "MH",
        "MQ",
        "MR",
        "MU",
        "YT",
        "MX",
        "FM",
        "MD",
        "MC",
        "MN",
        "ME",
        "MS",
        "MZ",
        "MM",
        "NA",
        "NR",
        "BQ",
        "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",
        "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",
        "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", "Amerika");
    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", "Mikronesien");
    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("419", "Latinamerika");
    namesMap.put("AC", "Ascensionøen");
    namesMap.put("AE", "Forenede Arabiske Emirater");
    namesMap.put("AG", "Antigua og Barbuda");
    namesMap.put("AL", "Albanien");
    namesMap.put("AM", "Armenien");
    namesMap.put("AN", "Hollandske Antiller");
    namesMap.put("AQ", "Antarktis");
    namesMap.put("AS", "Amerikansk Samoa");
    namesMap.put("AT", "Østrig");
    namesMap.put("AU", "Australien");
    namesMap.put("AX", "Ålandsøerne");
    namesMap.put("AZ", "Aserbajdsjan");
    namesMap.put("BA", "Bosnien-Hercegovina");
    namesMap.put("BE", "Belgien");
    namesMap.put("BG", "Bulgarien");
    namesMap.put("BQ", "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", "Centralafrikanske Republik");
    namesMap.put("CG", "Congo-Brazzaville");
    namesMap.put("CH", "Schweiz");
    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("FK", "Falklandsøerne");
    namesMap.put("FM", "Mikronesiens Forenede Stater");
    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", "Hongkong SAR");
    namesMap.put("HM", "Heard- og McDonald-øerne");
    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("LT", "Litauen");
    namesMap.put("LV", "Letland");
    namesMap.put("LY", "Libyen");
    namesMap.put("MA", "Marokko");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MH", "Marshalløerne");
    namesMap.put("MK", "Makedonien");
    namesMap.put("MN", "Mongoliet");
    namesMap.put("MO", "Macao SAR");
    namesMap.put("MP", "Nordmarianerne");
    namesMap.put("MR", "Mauretanien");
    namesMap.put("MV", "Maldiverne");
    namesMap.put("NC", "Ny Caledonien");
    namesMap.put("NF", "Norfolkøen");
    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("SH", "St. Helena");
    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", "Sao Tome og Principe");
    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("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": "Amerika",
        "021": "Det nordlige Amerika",
        "029": "Caribien",
        "030": "Østasien",
        "034": "Sydasien",
        "035": "Sydøstasien",
        "039": "Sydeuropa",
        "053": "Australasien",
        "054": "Melanesien",
        "057": "Mikronesien",
        "061": "Polynesien",
        "142": "Asien",
        "143": "Centralasien",
        "145": "Vestasien",
        "150": "Europa",
        "151": "Østeuropa",
        "154": "Nordeuropa",
        "155": "Vesteuropa",
        "419": "Latinamerika",
        "AC": "Ascensionøen",
        "AE": "Forenede Arabiske Emirater",
        "AG": "Antigua og Barbuda",
        "AL": "Albanien",
        "AM": "Armenien",
        "AN": "Hollandske Antiller",
        "AQ": "Antarktis",
        "AS": "Amerikansk Samoa",
        "AT": "Østrig",
        "AU": "Australien",
        "AX": "Ålandsøerne",
        "AZ": "Aserbajdsjan",
        "BA": "Bosnien-Hercegovina",
        "BE": "Belgien",
        "BG": "Bulgarien",
        "BQ": "Nederlandske antiller",
        "BR": "Brasilien",
        "BV": "Bouvetøen",
        "BY": "Hviderusland",
        "CC": "Cocosøerne",
        "CD": "Congo-Kinshasa",
        "CF": "Centralafrikanske Republik",
        "CG": "Congo-Brazzaville",
        "CH": "Schweiz",
        "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",
        "FK": "Falklandsøerne",
        "FM": "Mikronesiens Forenede Stater",
        "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": "Hongkong SAR",
        "HM": "Heard- og McDonald-øerne",
        "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",
        "LT": "Litauen",
        "LV": "Letland",
        "LY": "Libyen",
        "MA": "Marokko",
        "MG": "Madagaskar",
        "MH": "Marshalløerne",
        "MK": "Makedonien",
        "MN": "Mongoliet",
        "MO": "Macao SAR",
        "MP": "Nordmarianerne",
        "MR": "Mauretanien",
        "MV": "Maldiverne",
        "NC": "Ny Caledonien",
        "NF": "Norfolkøen",
        "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",
        "SH": "St. Helena",
        "SI": "Slovenien",
        "SJ": "Svalbard og Jan Mayen",
        "SK": "Slovakiet",
        "SR": "Surinam",
        "SS": "Sydsudan",
        "ST": "Sao Tome og Principe",
        "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",
        "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"
    };
  }-*/;
}
