/*
 * 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",
        "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", "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("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": "Amerika",
        "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",
        "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"
    };
  }-*/;
}
