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

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("AD", "Uandora");
    namesMap.put("AF", "Ufugustani");
    namesMap.put("AL", "Ualbania");
    namesMap.put("AS", "Usamoa ya Marekani");
    namesMap.put("AZ", "Uazabajani");
    namesMap.put("BI", "Urundi");
    namesMap.put("BJ", "Ubelin");
    namesMap.put("CA", "Ukanada");
    namesMap.put("CG", "Ukongo");
    namesMap.put("CH", "Uswisi");
    namesMap.put("CI", "Ukodiva");
    namesMap.put("CL", "Uchile");
    namesMap.put("CN", "Uchina");
    namesMap.put("CO", "Ukolombia");
    namesMap.put("CU", "Ukuba");
    namesMap.put("CY", "Ukuprosi");
    namesMap.put("CZ", "Ucheki");
    namesMap.put("DJ", "Ujibuti");
    namesMap.put("DK", "Udenimaka");
    namesMap.put("DM", "Udominika");
    namesMap.put("DZ", "Alujeria");
    namesMap.put("EG", "Umisiri");
    namesMap.put("ER", "Uriterea");
    namesMap.put("ES", "Uhispania");
    namesMap.put("ET", "Uhabeshi");
    namesMap.put("FI", "Ufini");
    namesMap.put("FJ", "Ufiji");
    namesMap.put("FR", "Ufaransa");
    namesMap.put("GA", "Ugaboni");
    namesMap.put("GD", "Ugrenada");
    namesMap.put("GE", "Ujojia");
    namesMap.put("GF", "Ufaransa yo Gwaya");
    namesMap.put("GH", "Ugana");
    namesMap.put("GI", "Ujibralta");
    namesMap.put("GL", "Ugrinlandi");
    namesMap.put("GM", "Ugambia");
    namesMap.put("GN", "Ugine");
    namesMap.put("GP", "Ugwadelupe");
    namesMap.put("GT", "Ugwatemala");
    namesMap.put("GU", "Ugwam");
    namesMap.put("GW", "Uginebisau");
    namesMap.put("GY", "Uguyana");
    namesMap.put("HN", "Uhondurasi");
    namesMap.put("HR", "Ukorasia");
    namesMap.put("HT", "Uhaiti");
    namesMap.put("HU", "Uhungaria");
    namesMap.put("ID", "Undonesia");
    namesMap.put("IE", "Uayalandi");
    namesMap.put("IL", "Uisraeli");
    namesMap.put("IN", "Uhindini");
    namesMap.put("IQ", "Wiraki");
    namesMap.put("IT", "Italia");
    namesMap.put("JM", "Ujamaika");
    namesMap.put("JO", "Uyordani");
    namesMap.put("JP", "Ujapani");
    namesMap.put("KE", "Ukenya");
    namesMap.put("KH", "Ukambodia");
    namesMap.put("KM", "Ukomoro");
    namesMap.put("KN", "Usantakitzi na Nevis");
    namesMap.put("KP", "Ukorea Kaskazini");
    namesMap.put("KR", "Ukorea Kusini");
    namesMap.put("KZ", "Ukazakistani");
    namesMap.put("LB", "Ulebanoni");
    namesMap.put("LC", "Usantalusia");
    namesMap.put("LI", "Ushenteni");
    namesMap.put("LK", "Usirilanka");
    namesMap.put("LR", "Uliberia");
    namesMap.put("LS", "Ulesoto");
    namesMap.put("LT", "Utwania");
    namesMap.put("LU", "Usembaji");
    namesMap.put("LV", "Ulativia");
    namesMap.put("LY", "Ulibya");
    namesMap.put("ME", "Umantegro");
    namesMap.put("MG", "Ubukini");
    namesMap.put("MK", "Umasedonia");
    namesMap.put("MW", "Umalawi");
    namesMap.put("MZ", "Umozambiki");
    namesMap.put("NE", "Unijeri");
    namesMap.put("NG", "Unijeria");
    namesMap.put("NO", "Unorwe");
    namesMap.put("OM", "Uomani");
    namesMap.put("PA", "Upanama");
    namesMap.put("PE", "Uperuu");
    namesMap.put("PF", "Ufaransa yo Potina");
    namesMap.put("PG", "Upapua");
    namesMap.put("PH", "Ufilipino");
    namesMap.put("PK", "Upakistani");
    namesMap.put("PL", "Upolandi");
    namesMap.put("PM", "Usantapieri na Mikeloni");
    namesMap.put("PN", "Upitkairni");
    namesMap.put("PR", "Upwetoriko");
    namesMap.put("PY", "Paragwai");
    namesMap.put("QA", "Ukatari");
    namesMap.put("RE", "Uriyunioni");
    namesMap.put("RO", "Uromania");
    namesMap.put("RW", "Urwanda");
    namesMap.put("SA", "Usaudi");
    namesMap.put("SC", "Ushelisheli");
    namesMap.put("SD", "Usudani");
    namesMap.put("SE", "Uswidi");
    namesMap.put("SG", "Usingapoo");
    namesMap.put("SH", "Usantahelena");
    namesMap.put("SI", "Uslovenia");
    namesMap.put("SK", "Uslovakia");
    namesMap.put("SM", "Usamarino");
    namesMap.put("SN", "Usenegali");
    namesMap.put("SO", "Usomalia");
    namesMap.put("SR", "Usurinamu");
    namesMap.put("ST", "Usao Tome na Principe");
    namesMap.put("SV", "Usalavado");
    namesMap.put("SY", "Usiria");
    namesMap.put("SZ", "Uswazi");
    namesMap.put("TD", "Uchadi");
    namesMap.put("TG", "Utogo");
    namesMap.put("TH", "Utailandi");
    namesMap.put("TJ", "Ujikistani");
    namesMap.put("TK", "Utokelau");
    namesMap.put("TL", "Utimo Mashariki");
    namesMap.put("TM", "Uturukimenistani");
    namesMap.put("TN", "Utunisia");
    namesMap.put("TO", "Utonga");
    namesMap.put("TR", "Utuki");
    namesMap.put("TT", "Utrinidad na Tobago");
    namesMap.put("TV", "Utuvalu");
    namesMap.put("TZ", "Utanzania");
    namesMap.put("US", "Umarekani");
    namesMap.put("VA", "Uvatikani");
    namesMap.put("VC", "Usantavisenti na Grenadini");
    namesMap.put("VE", "Uvenezuela");
    namesMap.put("VN", "Uvietinamu");
    namesMap.put("VU", "Uvanuatu");
    namesMap.put("WF", "Uwalis na Futuna");
    namesMap.put("WS", "Usamoa");
    namesMap.put("YE", "Uyemeni");
    namesMap.put("ZA", "Afrika du Sulu");
    namesMap.put("ZM", "Uzambia");
    namesMap.put("ZW", "Uzimbabwe");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "AD": "Uandora",
        "AF": "Ufugustani",
        "AL": "Ualbania",
        "AS": "Usamoa ya Marekani",
        "AZ": "Uazabajani",
        "BI": "Urundi",
        "BJ": "Ubelin",
        "CA": "Ukanada",
        "CG": "Ukongo",
        "CH": "Uswisi",
        "CI": "Ukodiva",
        "CL": "Uchile",
        "CN": "Uchina",
        "CO": "Ukolombia",
        "CU": "Ukuba",
        "CY": "Ukuprosi",
        "CZ": "Ucheki",
        "DJ": "Ujibuti",
        "DK": "Udenimaka",
        "DM": "Udominika",
        "DZ": "Alujeria",
        "EG": "Umisiri",
        "ER": "Uriterea",
        "ES": "Uhispania",
        "ET": "Uhabeshi",
        "FI": "Ufini",
        "FJ": "Ufiji",
        "FR": "Ufaransa",
        "GA": "Ugaboni",
        "GD": "Ugrenada",
        "GE": "Ujojia",
        "GF": "Ufaransa yo Gwaya",
        "GH": "Ugana",
        "GI": "Ujibralta",
        "GL": "Ugrinlandi",
        "GM": "Ugambia",
        "GN": "Ugine",
        "GP": "Ugwadelupe",
        "GT": "Ugwatemala",
        "GU": "Ugwam",
        "GW": "Uginebisau",
        "GY": "Uguyana",
        "HN": "Uhondurasi",
        "HR": "Ukorasia",
        "HT": "Uhaiti",
        "HU": "Uhungaria",
        "ID": "Undonesia",
        "IE": "Uayalandi",
        "IL": "Uisraeli",
        "IN": "Uhindini",
        "IQ": "Wiraki",
        "IT": "Italia",
        "JM": "Ujamaika",
        "JO": "Uyordani",
        "JP": "Ujapani",
        "KE": "Ukenya",
        "KH": "Ukambodia",
        "KM": "Ukomoro",
        "KN": "Usantakitzi na Nevis",
        "KP": "Ukorea Kaskazini",
        "KR": "Ukorea Kusini",
        "KZ": "Ukazakistani",
        "LB": "Ulebanoni",
        "LC": "Usantalusia",
        "LI": "Ushenteni",
        "LK": "Usirilanka",
        "LR": "Uliberia",
        "LS": "Ulesoto",
        "LT": "Utwania",
        "LU": "Usembaji",
        "LV": "Ulativia",
        "LY": "Ulibya",
        "ME": "Umantegro",
        "MG": "Ubukini",
        "MK": "Umasedonia",
        "MW": "Umalawi",
        "MZ": "Umozambiki",
        "NE": "Unijeri",
        "NG": "Unijeria",
        "NO": "Unorwe",
        "OM": "Uomani",
        "PA": "Upanama",
        "PE": "Uperuu",
        "PF": "Ufaransa yo Potina",
        "PG": "Upapua",
        "PH": "Ufilipino",
        "PK": "Upakistani",
        "PL": "Upolandi",
        "PM": "Usantapieri na Mikeloni",
        "PN": "Upitkairni",
        "PR": "Upwetoriko",
        "PY": "Paragwai",
        "QA": "Ukatari",
        "RE": "Uriyunioni",
        "RO": "Uromania",
        "RW": "Urwanda",
        "SA": "Usaudi",
        "SC": "Ushelisheli",
        "SD": "Usudani",
        "SE": "Uswidi",
        "SG": "Usingapoo",
        "SH": "Usantahelena",
        "SI": "Uslovenia",
        "SK": "Uslovakia",
        "SM": "Usamarino",
        "SN": "Usenegali",
        "SO": "Usomalia",
        "SR": "Usurinamu",
        "ST": "Usao Tome na Principe",
        "SV": "Usalavado",
        "SY": "Usiria",
        "SZ": "Uswazi",
        "TD": "Uchadi",
        "TG": "Utogo",
        "TH": "Utailandi",
        "TJ": "Ujikistani",
        "TK": "Utokelau",
        "TL": "Utimo Mashariki",
        "TM": "Uturukimenistani",
        "TN": "Utunisia",
        "TO": "Utonga",
        "TR": "Utuki",
        "TT": "Utrinidad na Tobago",
        "TV": "Utuvalu",
        "TZ": "Utanzania",
        "US": "Umarekani",
        "VA": "Uvatikani",
        "VC": "Usantavisenti na Grenadini",
        "VE": "Uvenezuela",
        "VN": "Uvietinamu",
        "VU": "Uvanuatu",
        "WF": "Uwalis na Futuna",
        "WS": "Usamoa",
        "YE": "Uyemeni",
        "ZA": "Afrika du Sulu",
        "ZM": "Uzambia",
        "ZW": "Uzimbabwe"
    };
  }-*/;
}
