/*
 * 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:
//  cldrVersion=21.0
//  number=$Revision: 6546 Google $
//  date=$Date: 2012-02-07 13:32:35 -0500 (Tue, 07 Feb 2012) $
//  type=root


/**
 * Localized names for the "nn" locale.
 */
public class LocalizedNamesImpl_nn extends LocalizedNamesImpl {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "verda");
    namesMap.put("002", "Afrika");
    namesMap.put("003", "Nord-Amerika");
    namesMap.put("005", "Sør-Amerika");
    namesMap.put("009", "Oseania");
    namesMap.put("011", "Vest-Afrika");
    namesMap.put("013", "Sentral-Amerika");
    namesMap.put("014", "Aust-Afrika");
    namesMap.put("015", "Nord-Afrika");
    namesMap.put("017", "Sentral-Afrika");
    namesMap.put("018", "Sørlege Afrika");
    namesMap.put("019", "Amerika");
    namesMap.put("021", "nordlege Amerika");
    namesMap.put("029", "Karibia");
    namesMap.put("030", "Aust-Asia");
    namesMap.put("034", "Sør-Asia");
    namesMap.put("035", "Søraust-Asia");
    namesMap.put("039", "Sør-Europa");
    namesMap.put("053", "Australia og New Zealand");
    namesMap.put("057", "Mikronesia");
    namesMap.put("143", "Sentral-Asia");
    namesMap.put("145", "Vest-Asia");
    namesMap.put("150", "Europa");
    namesMap.put("151", "Aust-Europa");
    namesMap.put("154", "Nord-Europa");
    namesMap.put("155", "Vest-Europa");
    namesMap.put("419", "Latin-Amerika");
    namesMap.put("AC", "Ascension");
    namesMap.put("AE", "Dei sameinte arabiske emirata");
    namesMap.put("AG", "Antigua og Barbuda");
    namesMap.put("AN", "Dei nederlandske Antillane");
    namesMap.put("AQ", "Antarktis");
    namesMap.put("AS", "Amerikansk Samoa");
    namesMap.put("AT", "Austerrike");
    namesMap.put("AX", "Åland");
    namesMap.put("AZ", "Aserbajdsjan");
    namesMap.put("BA", "Bosnia og Hercegovina");
    namesMap.put("BE", "Belgia");
    namesMap.put("BN", "Brunei Darussalam");
    namesMap.put("BR", "Brasil");
    namesMap.put("BV", "Bouvetøya");
    namesMap.put("BY", "Kviterussland");
    namesMap.put("CC", "Kokosøyane");
    namesMap.put("CD", "Kongo-Kinshasa");
    namesMap.put("CF", "Den sentralafrikanske republikken");
    namesMap.put("CG", "Kongo-Brazzaville");
    namesMap.put("CH", "Sveits");
    namesMap.put("CI", "Elfenbeinskysten");
    namesMap.put("CK", "Cookøyane");
    namesMap.put("CM", "Kamerun");
    namesMap.put("CN", "Kina");
    namesMap.put("CP", "Clippertonøya");
    namesMap.put("CS", "Serbia og Montenegro");
    namesMap.put("CV", "Kapp Verde");
    namesMap.put("CX", "Christmasøya");
    namesMap.put("CY", "Kypros");
    namesMap.put("CZ", "Tsjekkia");
    namesMap.put("DE", "Tyskland");
    namesMap.put("DK", "Danmark");
    namesMap.put("DO", "Den dominikanske republikken");
    namesMap.put("DZ", "Algerie");
    namesMap.put("EA", "Ceuta og Melilla");
    namesMap.put("EE", "Estland");
    namesMap.put("EH", "Vest-Sahara");
    namesMap.put("ES", "Spania");
    namesMap.put("ET", "Etiopia");
    namesMap.put("EU", "Den europeiske unionen");
    namesMap.put("FK", "Falklandsøyane");
    namesMap.put("FM", "Mikronesiaføderasjonen");
    namesMap.put("FO", "Færøyane");
    namesMap.put("FR", "Frankrike");
    namesMap.put("GB", "Storbritannia");
    namesMap.put("GF", "Fransk Guyana");
    namesMap.put("GL", "Grønland");
    namesMap.put("GQ", "Ekvatorial-Guinea");
    namesMap.put("GR", "Hellas");
    namesMap.put("GS", "Sør-Georgia og Sør-Sandwich-øyane");
    namesMap.put("HK", "Hongkong");
    namesMap.put("HM", "Heard- og McDonaldsøyane");
    namesMap.put("HR", "Kroatia");
    namesMap.put("HU", "Ungarn");
    namesMap.put("IC", "Kanariøyane");
    namesMap.put("IE", "Irland");
    namesMap.put("IM", "Man");
    namesMap.put("IO", "Britiske område i Det indiske hav");
    namesMap.put("IQ", "Irak");
    namesMap.put("IS", "Island");
    namesMap.put("IT", "Italia");
    namesMap.put("KG", "Kirgisistan");
    namesMap.put("KH", "Kambodsja");
    namesMap.put("KM", "Komorene");
    namesMap.put("KN", "St. Christopher og Nevis");
    namesMap.put("KP", "Nord-Korea");
    namesMap.put("KR", "Sør-Korea");
    namesMap.put("KY", "Caymanøyane");
    namesMap.put("KZ", "Kasakhstan");
    namesMap.put("LB", "Libanon");
    namesMap.put("LC", "St. Lucia");
    namesMap.put("LT", "Litauen");
    namesMap.put("MA", "Marokko");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MH", "Marshalløyane");
    namesMap.put("MK", "Makedonia");
    namesMap.put("MM", "Myanmar");
    namesMap.put("MO", "Macao");
    namesMap.put("MP", "Nord-Marianane");
    namesMap.put("MV", "Maldivane");
    namesMap.put("MZ", "Mosambik");
    namesMap.put("NC", "Ny-Caledonia");
    namesMap.put("NF", "Norfolkøyane");
    namesMap.put("NL", "Nederland");
    namesMap.put("NO", "Noreg");
    namesMap.put("PF", "Fransk Polynesia");
    namesMap.put("PG", "Papua Ny-Guinea");
    namesMap.put("PH", "Filippinane");
    namesMap.put("PL", "Polen");
    namesMap.put("PM", "St. Pierre og Miquelon");
    namesMap.put("PN", "Pitcairn");
    namesMap.put("PS", "Palestinsk territorium");
    namesMap.put("QO", "Ytre Oseania");
    namesMap.put("RU", "Russland");
    namesMap.put("SB", "Salomonøyane");
    namesMap.put("SC", "Seychellane");
    namesMap.put("SE", "Sverige");
    namesMap.put("SJ", "Svalbard og Jan Mayen");
    namesMap.put("SR", "Surinam");
    namesMap.put("ST", "São Tomé og Príncipe");
    namesMap.put("TC", "Turks- og Caicosøyane");
    namesMap.put("TD", "Tchad");
    namesMap.put("TF", "Franske sørområde");
    namesMap.put("TJ", "Tadsjikistan");
    namesMap.put("TL", "Aust-Timor");
    namesMap.put("TR", "Tyrkia");
    namesMap.put("TT", "Trinidad og Tobago");
    namesMap.put("UA", "Ukraina");
    namesMap.put("UM", "USAs ytre småøyar");
    namesMap.put("US", "USA");
    namesMap.put("UZ", "Usbekistan");
    namesMap.put("VA", "Vatikanstaten");
    namesMap.put("VC", "St. Vincent og Grenadinane");
    namesMap.put("VG", "Dei britiske jomfruøyane");
    namesMap.put("VI", "Dei amerikanske jomfruøyane");
    namesMap.put("WF", "Wallis og Futuna");
    namesMap.put("ZA", "Sør-Afrika");
    namesMap.put("ZZ", "ukjent område");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "verda",
        "002": "Afrika",
        "003": "Nord-Amerika",
        "005": "Sør-Amerika",
        "009": "Oseania",
        "011": "Vest-Afrika",
        "013": "Sentral-Amerika",
        "014": "Aust-Afrika",
        "015": "Nord-Afrika",
        "017": "Sentral-Afrika",
        "018": "Sørlege Afrika",
        "019": "Amerika",
        "021": "nordlege Amerika",
        "029": "Karibia",
        "030": "Aust-Asia",
        "034": "Sør-Asia",
        "035": "Søraust-Asia",
        "039": "Sør-Europa",
        "053": "Australia og New Zealand",
        "057": "Mikronesia",
        "143": "Sentral-Asia",
        "145": "Vest-Asia",
        "150": "Europa",
        "151": "Aust-Europa",
        "154": "Nord-Europa",
        "155": "Vest-Europa",
        "419": "Latin-Amerika",
        "AC": "Ascension",
        "AE": "Dei sameinte arabiske emirata",
        "AG": "Antigua og Barbuda",
        "AN": "Dei nederlandske Antillane",
        "AQ": "Antarktis",
        "AS": "Amerikansk Samoa",
        "AT": "Austerrike",
        "AX": "Åland",
        "AZ": "Aserbajdsjan",
        "BA": "Bosnia og Hercegovina",
        "BE": "Belgia",
        "BN": "Brunei Darussalam",
        "BR": "Brasil",
        "BV": "Bouvetøya",
        "BY": "Kviterussland",
        "CC": "Kokosøyane",
        "CD": "Kongo-Kinshasa",
        "CF": "Den sentralafrikanske republikken",
        "CG": "Kongo-Brazzaville",
        "CH": "Sveits",
        "CI": "Elfenbeinskysten",
        "CK": "Cookøyane",
        "CM": "Kamerun",
        "CN": "Kina",
        "CP": "Clippertonøya",
        "CS": "Serbia og Montenegro",
        "CV": "Kapp Verde",
        "CX": "Christmasøya",
        "CY": "Kypros",
        "CZ": "Tsjekkia",
        "DE": "Tyskland",
        "DK": "Danmark",
        "DO": "Den dominikanske republikken",
        "DZ": "Algerie",
        "EA": "Ceuta og Melilla",
        "EE": "Estland",
        "EH": "Vest-Sahara",
        "ES": "Spania",
        "ET": "Etiopia",
        "EU": "Den europeiske unionen",
        "FK": "Falklandsøyane",
        "FM": "Mikronesiaføderasjonen",
        "FO": "Færøyane",
        "FR": "Frankrike",
        "GB": "Storbritannia",
        "GF": "Fransk Guyana",
        "GL": "Grønland",
        "GQ": "Ekvatorial-Guinea",
        "GR": "Hellas",
        "GS": "Sør-Georgia og Sør-Sandwich-øyane",
        "HK": "Hongkong",
        "HM": "Heard- og McDonaldsøyane",
        "HR": "Kroatia",
        "HU": "Ungarn",
        "IC": "Kanariøyane",
        "IE": "Irland",
        "IM": "Man",
        "IO": "Britiske område i Det indiske hav",
        "IQ": "Irak",
        "IS": "Island",
        "IT": "Italia",
        "KG": "Kirgisistan",
        "KH": "Kambodsja",
        "KM": "Komorene",
        "KN": "St. Christopher og Nevis",
        "KP": "Nord-Korea",
        "KR": "Sør-Korea",
        "KY": "Caymanøyane",
        "KZ": "Kasakhstan",
        "LB": "Libanon",
        "LC": "St. Lucia",
        "LT": "Litauen",
        "MA": "Marokko",
        "MG": "Madagaskar",
        "MH": "Marshalløyane",
        "MK": "Makedonia",
        "MM": "Myanmar",
        "MO": "Macao",
        "MP": "Nord-Marianane",
        "MV": "Maldivane",
        "MZ": "Mosambik",
        "NC": "Ny-Caledonia",
        "NF": "Norfolkøyane",
        "NL": "Nederland",
        "NO": "Noreg",
        "PF": "Fransk Polynesia",
        "PG": "Papua Ny-Guinea",
        "PH": "Filippinane",
        "PL": "Polen",
        "PM": "St. Pierre og Miquelon",
        "PN": "Pitcairn",
        "PS": "Palestinsk territorium",
        "QO": "Ytre Oseania",
        "RU": "Russland",
        "SB": "Salomonøyane",
        "SC": "Seychellane",
        "SE": "Sverige",
        "SJ": "Svalbard og Jan Mayen",
        "SR": "Surinam",
        "ST": "São Tomé og Príncipe",
        "TC": "Turks- og Caicosøyane",
        "TD": "Tchad",
        "TF": "Franske sørområde",
        "TJ": "Tadsjikistan",
        "TL": "Aust-Timor",
        "TR": "Tyrkia",
        "TT": "Trinidad og Tobago",
        "UA": "Ukraina",
        "UM": "USAs ytre småøyar",
        "US": "USA",
        "UZ": "Usbekistan",
        "VA": "Vatikanstaten",
        "VC": "St. Vincent og Grenadinane",
        "VG": "Dei britiske jomfruøyane",
        "VI": "Dei amerikanske jomfruøyane",
        "WF": "Wallis og Futuna",
        "ZA": "Sør-Afrika",
        "ZZ": "ukjent område"
    };
  }-*/;
}
