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

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("AD", "Andora");
    namesMap.put("AE", "Falme dha Kiarabu");
    namesMap.put("AF", "Afuganistani");
    namesMap.put("AG", "Antigua na Barbuda");
    namesMap.put("AN", "Antili za Uholandhi");
    namesMap.put("AR", "Ajentina");
    namesMap.put("AS", "Thamoa ya Marekani");
    namesMap.put("AT", "Authtria");
    namesMap.put("AU", "Authtralia");
    namesMap.put("AZ", "Adhabajani");
    namesMap.put("BA", "Bothnia na Hedhegovina");
    namesMap.put("BB", "Babadothi");
    namesMap.put("BD", "Bangladeshi");
    namesMap.put("BE", "Ubelgiji");
    namesMap.put("BF", "Bukinafatho");
    namesMap.put("BH", "Bahareni");
    namesMap.put("BJ", "Benini");
    namesMap.put("BR", "Brazili");
    namesMap.put("BS", "Bahama");
    namesMap.put("BT", "Butani");
    namesMap.put("BW", "Botthwana");
    namesMap.put("BY", "Belaruthi");
    namesMap.put("BZ", "Belidhe");
    namesMap.put("CA", "Kanada");
    namesMap.put("CD", "Jamhuri ya Kidemokrathia ya Kongo");
    namesMap.put("CF", "Jamhuri ya Afrika ya Kati");
    namesMap.put("CG", "Kongo");
    namesMap.put("CH", "Uthwithi");
    namesMap.put("CI", "Kodivaa");
    namesMap.put("CK", "Vithiwa vya Cook");
    namesMap.put("CM", "Kameruni");
    namesMap.put("CO", "Kolombia");
    namesMap.put("CR", "Kothtarika");
    namesMap.put("CU", "Kuba");
    namesMap.put("CV", "Kepuvede");
    namesMap.put("CY", "Kuprothi");
    namesMap.put("CZ", "Jamhuri ya Cheki");
    namesMap.put("DE", "Ujerumani");
    namesMap.put("DJ", "Jibuti");
    namesMap.put("DK", "Denmaki");
    namesMap.put("DM", "Dominika");
    namesMap.put("DO", "Jamhuri ya Dominika");
    namesMap.put("DZ", "Aljeria");
    namesMap.put("EC", "Ekwado");
    namesMap.put("EE", "Ethtonia");
    namesMap.put("EG", "Mithri");
    namesMap.put("ES", "Hithpania");
    namesMap.put("ET", "Uhabeshi");
    namesMap.put("FI", "Ufini");
    namesMap.put("FK", "Vithiwa vya Falkland");
    namesMap.put("FM", "Mikronethia");
    namesMap.put("FR", "Ufarantha");
    namesMap.put("GA", "Gaboni");
    namesMap.put("GB", "Uingeredha");
    namesMap.put("GE", "Jojia");
    namesMap.put("GF", "Gwiyana ya Ufarantha");
    namesMap.put("GI", "Jibralta");
    namesMap.put("GL", "Grinlandi");
    namesMap.put("GN", "Gine");
    namesMap.put("GP", "Gwadelupe");
    namesMap.put("GQ", "Ginekweta");
    namesMap.put("GR", "Ugiriki");
    namesMap.put("GT", "Gwatemala");
    namesMap.put("GU", "Gwam");
    namesMap.put("GW", "Ginebisau");
    namesMap.put("HN", "Hondurathi");
    namesMap.put("HR", "Korathia");
    namesMap.put("HU", "Hungaria");
    namesMap.put("ID", "Indonethia");
    namesMap.put("IE", "Ayalandi");
    namesMap.put("IL", "Ithraeli");
    namesMap.put("IO", "Ieneo la Uingeredha katika Bahari Hindi");
    namesMap.put("IQ", "Iraki");
    namesMap.put("IR", "Uajemi");
    namesMap.put("IS", "Aithlandi");
    namesMap.put("IT", "Italia");
    namesMap.put("JM", "Jamaika");
    namesMap.put("JO", "Yordani");
    namesMap.put("JP", "Japani");
    namesMap.put("KG", "Kirigizithtani");
    namesMap.put("KH", "Kambodia");
    namesMap.put("KM", "Komoro");
    namesMap.put("KN", "Thantakitdhi na Nevith");
    namesMap.put("KP", "Korea Kathkazini");
    namesMap.put("KR", "Korea Kuthini");
    namesMap.put("KW", "Kuwaiti");
    namesMap.put("KY", "Vithiwa vya Kayman");
    namesMap.put("KZ", "Kazakithtani");
    namesMap.put("LA", "Laothi");
    namesMap.put("LB", "Lebanoni");
    namesMap.put("LC", "Thantaluthia");
    namesMap.put("LI", "Lishenteni");
    namesMap.put("LK", "Thirilanka");
    namesMap.put("LS", "Lethoto");
    namesMap.put("LT", "Litwania");
    namesMap.put("LU", "Lathembagi");
    namesMap.put("LV", "Lativia");
    namesMap.put("MA", "Moroko");
    namesMap.put("MC", "Monako");
    namesMap.put("MG", "Bukini");
    namesMap.put("MH", "Vithiwa vya Marshal");
    namesMap.put("MK", "Mathedonia");
    namesMap.put("MM", "Myama");
    namesMap.put("MP", "Vithiwa vya Mariana vya Kathkazini");
    namesMap.put("MQ", "Martiniki");
    namesMap.put("MR", "Moritania");
    namesMap.put("MS", "Monttherrati");
    namesMap.put("MU", "Morithi");
    namesMap.put("MV", "Modivu");
    namesMap.put("MX", "Mekthiko");
    namesMap.put("MY", "Malethia");
    namesMap.put("MZ", "Mthumbiji");
    namesMap.put("NC", "Nyukaledonia");
    namesMap.put("NE", "Nijeri");
    namesMap.put("NF", "Kithiwa cha Norfok");
    namesMap.put("NG", "Nijeria");
    namesMap.put("NI", "Nikaragwa");
    namesMap.put("NL", "Uholandhi");
    namesMap.put("NO", "Norwe");
    namesMap.put("NP", "Nepali");
    namesMap.put("NZ", "Nyudhilandi");
    namesMap.put("OM", "Omani");
    namesMap.put("PF", "Polinesia ya Ufarantha");
    namesMap.put("PG", "Papua");
    namesMap.put("PH", "Filipino");
    namesMap.put("PK", "Pakithtani");
    namesMap.put("PL", "Polandi");
    namesMap.put("PM", "Thantapieri na Mikeloni");
    namesMap.put("PN", "Pitkairni");
    namesMap.put("PR", "Pwetoriko");
    namesMap.put("PS", "Palestina");
    namesMap.put("PT", "Ureno");
    namesMap.put("PY", "Paragwai");
    namesMap.put("QA", "Katari");
    namesMap.put("RE", "Riyunioni");
    namesMap.put("RU", "Uruthi");
    namesMap.put("SA", "Thaudi");
    namesMap.put("SB", "Vithiwa vya Tholomon");
    namesMap.put("SC", "Shelisheli");
    namesMap.put("SD", "Thudani");
    namesMap.put("SE", "Uthwidi");
    namesMap.put("SG", "Thingapoo");
    namesMap.put("SH", "Thantahelena");
    namesMap.put("SI", "Thlovenia");
    namesMap.put("SK", "Tholvakia");
    namesMap.put("SL", "Thiera Leoni");
    namesMap.put("SM", "Thamarino");
    namesMap.put("SN", "Thenegali");
    namesMap.put("SO", "Thomalia");
    namesMap.put("SR", "Thurinamu");
    namesMap.put("ST", "Thao Tome na Principe");
    namesMap.put("SV", "Elsavado");
    namesMap.put("SY", "Thiria");
    namesMap.put("SZ", "Uthwadhi");
    namesMap.put("TC", "Vithiwa vya Turki na Kaiko");
    namesMap.put("TD", "Chadi");
    namesMap.put("TH", "Tailandi");
    namesMap.put("TJ", "Tajikithtani");
    namesMap.put("TL", "Timori ya Mashariki");
    namesMap.put("TM", "Turukimenithtani");
    namesMap.put("TN", "Tunithia");
    namesMap.put("TR", "Uturuki");
    namesMap.put("TT", "Trinidad na Tobago");
    namesMap.put("TW", "Taiwani");
    namesMap.put("TZ", "Tadhania");
    namesMap.put("US", "Marekani");
    namesMap.put("UY", "Urugwai");
    namesMap.put("UZ", "Udhibekithtani");
    namesMap.put("VA", "Vatikani");
    namesMap.put("VC", "Thantavithenti na Grenadini");
    namesMap.put("VG", "Vithiwa vya Virgin vya Uingeredha");
    namesMap.put("VI", "Vithiwa vya Virgin vya Marekani");
    namesMap.put("VN", "Vietinamu");
    namesMap.put("WF", "Walith na Futuna");
    namesMap.put("WS", "Thamoa");
    namesMap.put("YE", "Yemeni");
    namesMap.put("ZA", "Afrika Kuthini");
    namesMap.put("ZM", "Dhambia");
    namesMap.put("ZW", "Dhimbabwe");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "AD": "Andora",
        "AE": "Falme dha Kiarabu",
        "AF": "Afuganistani",
        "AG": "Antigua na Barbuda",
        "AN": "Antili za Uholandhi",
        "AR": "Ajentina",
        "AS": "Thamoa ya Marekani",
        "AT": "Authtria",
        "AU": "Authtralia",
        "AZ": "Adhabajani",
        "BA": "Bothnia na Hedhegovina",
        "BB": "Babadothi",
        "BD": "Bangladeshi",
        "BE": "Ubelgiji",
        "BF": "Bukinafatho",
        "BH": "Bahareni",
        "BJ": "Benini",
        "BR": "Brazili",
        "BS": "Bahama",
        "BT": "Butani",
        "BW": "Botthwana",
        "BY": "Belaruthi",
        "BZ": "Belidhe",
        "CA": "Kanada",
        "CD": "Jamhuri ya Kidemokrathia ya Kongo",
        "CF": "Jamhuri ya Afrika ya Kati",
        "CG": "Kongo",
        "CH": "Uthwithi",
        "CI": "Kodivaa",
        "CK": "Vithiwa vya Cook",
        "CM": "Kameruni",
        "CO": "Kolombia",
        "CR": "Kothtarika",
        "CU": "Kuba",
        "CV": "Kepuvede",
        "CY": "Kuprothi",
        "CZ": "Jamhuri ya Cheki",
        "DE": "Ujerumani",
        "DJ": "Jibuti",
        "DK": "Denmaki",
        "DM": "Dominika",
        "DO": "Jamhuri ya Dominika",
        "DZ": "Aljeria",
        "EC": "Ekwado",
        "EE": "Ethtonia",
        "EG": "Mithri",
        "ES": "Hithpania",
        "ET": "Uhabeshi",
        "FI": "Ufini",
        "FK": "Vithiwa vya Falkland",
        "FM": "Mikronethia",
        "FR": "Ufarantha",
        "GA": "Gaboni",
        "GB": "Uingeredha",
        "GE": "Jojia",
        "GF": "Gwiyana ya Ufarantha",
        "GI": "Jibralta",
        "GL": "Grinlandi",
        "GN": "Gine",
        "GP": "Gwadelupe",
        "GQ": "Ginekweta",
        "GR": "Ugiriki",
        "GT": "Gwatemala",
        "GU": "Gwam",
        "GW": "Ginebisau",
        "HN": "Hondurathi",
        "HR": "Korathia",
        "HU": "Hungaria",
        "ID": "Indonethia",
        "IE": "Ayalandi",
        "IL": "Ithraeli",
        "IO": "Ieneo la Uingeredha katika Bahari Hindi",
        "IQ": "Iraki",
        "IR": "Uajemi",
        "IS": "Aithlandi",
        "IT": "Italia",
        "JM": "Jamaika",
        "JO": "Yordani",
        "JP": "Japani",
        "KG": "Kirigizithtani",
        "KH": "Kambodia",
        "KM": "Komoro",
        "KN": "Thantakitdhi na Nevith",
        "KP": "Korea Kathkazini",
        "KR": "Korea Kuthini",
        "KW": "Kuwaiti",
        "KY": "Vithiwa vya Kayman",
        "KZ": "Kazakithtani",
        "LA": "Laothi",
        "LB": "Lebanoni",
        "LC": "Thantaluthia",
        "LI": "Lishenteni",
        "LK": "Thirilanka",
        "LS": "Lethoto",
        "LT": "Litwania",
        "LU": "Lathembagi",
        "LV": "Lativia",
        "MA": "Moroko",
        "MC": "Monako",
        "MG": "Bukini",
        "MH": "Vithiwa vya Marshal",
        "MK": "Mathedonia",
        "MM": "Myama",
        "MP": "Vithiwa vya Mariana vya Kathkazini",
        "MQ": "Martiniki",
        "MR": "Moritania",
        "MS": "Monttherrati",
        "MU": "Morithi",
        "MV": "Modivu",
        "MX": "Mekthiko",
        "MY": "Malethia",
        "MZ": "Mthumbiji",
        "NC": "Nyukaledonia",
        "NE": "Nijeri",
        "NF": "Kithiwa cha Norfok",
        "NG": "Nijeria",
        "NI": "Nikaragwa",
        "NL": "Uholandhi",
        "NO": "Norwe",
        "NP": "Nepali",
        "NZ": "Nyudhilandi",
        "OM": "Omani",
        "PF": "Polinesia ya Ufarantha",
        "PG": "Papua",
        "PH": "Filipino",
        "PK": "Pakithtani",
        "PL": "Polandi",
        "PM": "Thantapieri na Mikeloni",
        "PN": "Pitkairni",
        "PR": "Pwetoriko",
        "PS": "Palestina",
        "PT": "Ureno",
        "PY": "Paragwai",
        "QA": "Katari",
        "RE": "Riyunioni",
        "RU": "Uruthi",
        "SA": "Thaudi",
        "SB": "Vithiwa vya Tholomon",
        "SC": "Shelisheli",
        "SD": "Thudani",
        "SE": "Uthwidi",
        "SG": "Thingapoo",
        "SH": "Thantahelena",
        "SI": "Thlovenia",
        "SK": "Tholvakia",
        "SL": "Thiera Leoni",
        "SM": "Thamarino",
        "SN": "Thenegali",
        "SO": "Thomalia",
        "SR": "Thurinamu",
        "ST": "Thao Tome na Principe",
        "SV": "Elsavado",
        "SY": "Thiria",
        "SZ": "Uthwadhi",
        "TC": "Vithiwa vya Turki na Kaiko",
        "TD": "Chadi",
        "TH": "Tailandi",
        "TJ": "Tajikithtani",
        "TL": "Timori ya Mashariki",
        "TM": "Turukimenithtani",
        "TN": "Tunithia",
        "TR": "Uturuki",
        "TT": "Trinidad na Tobago",
        "TW": "Taiwani",
        "TZ": "Tadhania",
        "US": "Marekani",
        "UY": "Urugwai",
        "UZ": "Udhibekithtani",
        "VA": "Vatikani",
        "VC": "Thantavithenti na Grenadini",
        "VG": "Vithiwa vya Virgin vya Uingeredha",
        "VI": "Vithiwa vya Virgin vya Marekani",
        "VN": "Vietinamu",
        "WF": "Walith na Futuna",
        "WS": "Thamoa",
        "YE": "Yemeni",
        "ZA": "Afrika Kuthini",
        "ZM": "Dhambia",
        "ZW": "Dhimbabwe"
    };
  }-*/;
}
