/*
 * Copyright 2014 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:
//  cldrVersion=25
//  date=$Date: 2014-03-01 06:57:43 +0100 (Sat, 01 Mar 2014) $
//  number=$Revision: 9852 $
//  type=da

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