/*
 * 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=id

/**
 * Localized names for the "id" locale.
 */
public class LocalizedNamesImpl_id extends LocalizedNamesImpl {

  @Override
  public String[] loadLikelyRegionCodes() {
    return new String[] {
        "ID",
    };
  }

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "Dunia");
    namesMap.put("002", "Afrika");
    namesMap.put("003", "Amerika Utara");
    namesMap.put("005", "Amerika Selatan");
    namesMap.put("009", "Oseania");
    namesMap.put("011", "Afrika Barat");
    namesMap.put("013", "Amerika Tengah");
    namesMap.put("014", "Afrika Timur");
    namesMap.put("015", "Afrika Utara");
    namesMap.put("017", "Afrika Tengah");
    namesMap.put("018", "Afrika Bagian Selatan");
    namesMap.put("019", "Amerika");
    namesMap.put("021", "Amerika Bagian Utara");
    namesMap.put("029", "Kepulauan Karibia");
    namesMap.put("030", "Asia Timur");
    namesMap.put("034", "Asia Selatan");
    namesMap.put("035", "Asia Tenggara");
    namesMap.put("039", "Eropa Selatan");
    namesMap.put("057", "Wilayah Mikronesia");
    namesMap.put("061", "Polinesia");
    namesMap.put("143", "Asia Tengah");
    namesMap.put("145", "Asia Barat");
    namesMap.put("150", "Eropa");
    namesMap.put("151", "Eropa Timur");
    namesMap.put("154", "Eropa Utara");
    namesMap.put("155", "Eropa Barat");
    namesMap.put("419", "Amerika Latin");
    namesMap.put("AC", "Pulau Ascension");
    namesMap.put("AE", "Uni Emirat Arab");
    namesMap.put("AF", "Afganistan");
    namesMap.put("AG", "Antigua dan Barbuda");
    namesMap.put("AN", "Antilla Belanda");
    namesMap.put("AQ", "Antarktika");
    namesMap.put("AS", "Samoa Amerika");
    namesMap.put("AX", "Kepulauan Aland");
    namesMap.put("BA", "Bosnia dan Herzegovina");
    namesMap.put("BE", "Belgia");
    namesMap.put("BL", "Saint Barthelemy");
    namesMap.put("BQ", "Karibia Belanda");
    namesMap.put("BR", "Brasil");
    namesMap.put("BS", "Bahama");
    namesMap.put("BV", "Pulau Bouvet");
    namesMap.put("CA", "Kanada");
    namesMap.put("CC", "Kepulauan Cocos");
    namesMap.put("CD", "Kongo - Kinshasa");
    namesMap.put("CF", "Republik Afrika Tengah");
    namesMap.put("CG", "Kongo - Brazzaville");
    namesMap.put("CH", "Swiss");
    namesMap.put("CI", "Cote d'Ivoire");
    namesMap.put("CK", "Kepulauan Cook");
    namesMap.put("CL", "Cile");
    namesMap.put("CM", "Kamerun");
    namesMap.put("CO", "Kolombia");
    namesMap.put("CP", "Pulau Clipperton");
    namesMap.put("CR", "Kosta Rika");
    namesMap.put("CU", "Kuba");
    namesMap.put("CV", "Tanjung Verde");
    namesMap.put("CX", "Pulau Christmas");
    namesMap.put("CY", "Siprus");
    namesMap.put("CZ", "Republik Cheska");
    namesMap.put("DE", "Jerman");
    namesMap.put("DJ", "Jibuti");
    namesMap.put("DM", "Dominika");
    namesMap.put("DO", "Republik Dominika");
    namesMap.put("DZ", "Aljazair");
    namesMap.put("EA", "Ceuta dan Melilla");
    namesMap.put("EC", "Ekuador");
    namesMap.put("EG", "Mesir");
    namesMap.put("EH", "Sahara Barat");
    namesMap.put("ES", "Spanyol");
    namesMap.put("ET", "Etiopia");
    namesMap.put("EU", "Uni Eropa");
    namesMap.put("FI", "Finlandia");
    namesMap.put("FK", "Kepulauan Malvinas");
    namesMap.put("FM", "Mikronesia");
    namesMap.put("FO", "Kepulauan Faroe");
    namesMap.put("FR", "Prancis");
    namesMap.put("GB", "Inggris");
    namesMap.put("GF", "Guyana Prancis");
    namesMap.put("GL", "Grinlandia");
    namesMap.put("GQ", "Guinea Ekuatorial");
    namesMap.put("GR", "Yunani");
    namesMap.put("GS", "Georgia Selatan dan Kepulauan Sandwich Selatan");
    namesMap.put("HM", "Pulau Heard dan Kepulauan McDonald");
    namesMap.put("HR", "Kroasia");
    namesMap.put("HU", "Hungaria");
    namesMap.put("IC", "Kepulauan Canary");
    namesMap.put("IE", "Irlandia");
    namesMap.put("IM", "Pulau Man");
    namesMap.put("IO", "Wilayah Inggris di Samudra Hindia");
    namesMap.put("IQ", "Irak");
    namesMap.put("IS", "Islandia");
    namesMap.put("IT", "Italia");
    namesMap.put("JM", "Jamaika");
    namesMap.put("JO", "Yordania");
    namesMap.put("JP", "Jepang");
    namesMap.put("KG", "Kirgistan");
    namesMap.put("KH", "Kamboja");
    namesMap.put("KM", "Komoro");
    namesMap.put("KN", "Saint Kitts dan Nevis");
    namesMap.put("KP", "Korea Utara");
    namesMap.put("KR", "Korea Selatan");
    namesMap.put("KY", "Kepulauan Cayman");
    namesMap.put("KZ", "Kazakstan");
    namesMap.put("LT", "Lituania");
    namesMap.put("LU", "Luksemburg");
    namesMap.put("LY", "Libia");
    namesMap.put("MA", "Maroko");
    namesMap.put("MC", "Monako");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MH", "Kepulauan Marshall");
    namesMap.put("MK", "Makedonia");
    namesMap.put("MO", "Makau SAR China");
    namesMap.put("MP", "Kepulauan Mariana Utara");
    namesMap.put("MQ", "Martinik");
    namesMap.put("MV", "Maladewa");
    namesMap.put("MX", "Meksiko");
    namesMap.put("MZ", "Mozambik");
    namesMap.put("NC", "Kaledonia Baru");
    namesMap.put("NF", "Kepulauan Norfolk");
    namesMap.put("NI", "Nikaragua");
    namesMap.put("NL", "Belanda");
    namesMap.put("NO", "Norwegia");
    namesMap.put("NZ", "Selandia Baru");
    namesMap.put("PF", "Polinesia Prancis");
    namesMap.put("PG", "Papua Nugini");
    namesMap.put("PH", "Filipina");
    namesMap.put("PL", "Polandia");
    namesMap.put("PM", "Saint Pierre dan Miquelon");
    namesMap.put("PN", "Kepulauan Pitcairn");
    namesMap.put("PR", "Puerto Riko");
    namesMap.put("PS", "Wilayah Palestina");
    namesMap.put("QO", "Oseania Luar");
    namesMap.put("RO", "Rumania");
    namesMap.put("RU", "Rusia");
    namesMap.put("SA", "Arab Saudi");
    namesMap.put("SB", "Kepulauan Solomon");
    namesMap.put("SE", "Swedia");
    namesMap.put("SG", "Singapura");
    namesMap.put("SJ", "Kepulauan Svalbard dan Jan Mayen");
    namesMap.put("SS", "Sudan Selatan");
    namesMap.put("ST", "Sao Tome dan Principe");
    namesMap.put("SY", "Suriah");
    namesMap.put("TC", "Kepulauan Turks dan Caicos");
    namesMap.put("TD", "Cad");
    namesMap.put("TF", "Wilayah Kutub Selatan Prancis");
    namesMap.put("TL", "Timor Leste");
    namesMap.put("TM", "Turkimenistan");
    namesMap.put("TR", "Turki");
    namesMap.put("TT", "Trinidad dan Tobago");
    namesMap.put("UA", "Ukraina");
    namesMap.put("UM", "Kepulauan Terluar A.S.");
    namesMap.put("US", "Amerika Serikat");
    namesMap.put("VA", "Vatikan");
    namesMap.put("VC", "Saint Vincent dan Grenadines");
    namesMap.put("VG", "Kepulauan Virgin Inggris");
    namesMap.put("VI", "Kepulauan Virgin A.S.");
    namesMap.put("WF", "Kepulauan Wallis dan Futuna");
    namesMap.put("YE", "Yaman");
    namesMap.put("ZA", "Afrika Selatan");
    namesMap.put("ZZ", "Wilayah Tidak Dikenal");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "Dunia",
        "002": "Afrika",
        "003": "Amerika Utara",
        "005": "Amerika Selatan",
        "009": "Oseania",
        "011": "Afrika Barat",
        "013": "Amerika Tengah",
        "014": "Afrika Timur",
        "015": "Afrika Utara",
        "017": "Afrika Tengah",
        "018": "Afrika Bagian Selatan",
        "019": "Amerika",
        "021": "Amerika Bagian Utara",
        "029": "Kepulauan Karibia",
        "030": "Asia Timur",
        "034": "Asia Selatan",
        "035": "Asia Tenggara",
        "039": "Eropa Selatan",
        "057": "Wilayah Mikronesia",
        "061": "Polinesia",
        "143": "Asia Tengah",
        "145": "Asia Barat",
        "150": "Eropa",
        "151": "Eropa Timur",
        "154": "Eropa Utara",
        "155": "Eropa Barat",
        "419": "Amerika Latin",
        "AC": "Pulau Ascension",
        "AE": "Uni Emirat Arab",
        "AF": "Afganistan",
        "AG": "Antigua dan Barbuda",
        "AN": "Antilla Belanda",
        "AQ": "Antarktika",
        "AS": "Samoa Amerika",
        "AX": "Kepulauan Aland",
        "BA": "Bosnia dan Herzegovina",
        "BE": "Belgia",
        "BL": "Saint Barthelemy",
        "BQ": "Karibia Belanda",
        "BR": "Brasil",
        "BS": "Bahama",
        "BV": "Pulau Bouvet",
        "CA": "Kanada",
        "CC": "Kepulauan Cocos",
        "CD": "Kongo - Kinshasa",
        "CF": "Republik Afrika Tengah",
        "CG": "Kongo - Brazzaville",
        "CH": "Swiss",
        "CI": "Cote d'Ivoire",
        "CK": "Kepulauan Cook",
        "CL": "Cile",
        "CM": "Kamerun",
        "CO": "Kolombia",
        "CP": "Pulau Clipperton",
        "CR": "Kosta Rika",
        "CU": "Kuba",
        "CV": "Tanjung Verde",
        "CX": "Pulau Christmas",
        "CY": "Siprus",
        "CZ": "Republik Cheska",
        "DE": "Jerman",
        "DJ": "Jibuti",
        "DM": "Dominika",
        "DO": "Republik Dominika",
        "DZ": "Aljazair",
        "EA": "Ceuta dan Melilla",
        "EC": "Ekuador",
        "EG": "Mesir",
        "EH": "Sahara Barat",
        "ES": "Spanyol",
        "ET": "Etiopia",
        "EU": "Uni Eropa",
        "FI": "Finlandia",
        "FK": "Kepulauan Malvinas",
        "FM": "Mikronesia",
        "FO": "Kepulauan Faroe",
        "FR": "Prancis",
        "GB": "Inggris",
        "GF": "Guyana Prancis",
        "GL": "Grinlandia",
        "GQ": "Guinea Ekuatorial",
        "GR": "Yunani",
        "GS": "Georgia Selatan dan Kepulauan Sandwich Selatan",
        "HM": "Pulau Heard dan Kepulauan McDonald",
        "HR": "Kroasia",
        "HU": "Hungaria",
        "IC": "Kepulauan Canary",
        "IE": "Irlandia",
        "IM": "Pulau Man",
        "IO": "Wilayah Inggris di Samudra Hindia",
        "IQ": "Irak",
        "IS": "Islandia",
        "IT": "Italia",
        "JM": "Jamaika",
        "JO": "Yordania",
        "JP": "Jepang",
        "KG": "Kirgistan",
        "KH": "Kamboja",
        "KM": "Komoro",
        "KN": "Saint Kitts dan Nevis",
        "KP": "Korea Utara",
        "KR": "Korea Selatan",
        "KY": "Kepulauan Cayman",
        "KZ": "Kazakstan",
        "LT": "Lituania",
        "LU": "Luksemburg",
        "LY": "Libia",
        "MA": "Maroko",
        "MC": "Monako",
        "MG": "Madagaskar",
        "MH": "Kepulauan Marshall",
        "MK": "Makedonia",
        "MO": "Makau SAR China",
        "MP": "Kepulauan Mariana Utara",
        "MQ": "Martinik",
        "MV": "Maladewa",
        "MX": "Meksiko",
        "MZ": "Mozambik",
        "NC": "Kaledonia Baru",
        "NF": "Kepulauan Norfolk",
        "NI": "Nikaragua",
        "NL": "Belanda",
        "NO": "Norwegia",
        "NZ": "Selandia Baru",
        "PF": "Polinesia Prancis",
        "PG": "Papua Nugini",
        "PH": "Filipina",
        "PL": "Polandia",
        "PM": "Saint Pierre dan Miquelon",
        "PN": "Kepulauan Pitcairn",
        "PR": "Puerto Riko",
        "PS": "Wilayah Palestina",
        "QO": "Oseania Luar",
        "RO": "Rumania",
        "RU": "Rusia",
        "SA": "Arab Saudi",
        "SB": "Kepulauan Solomon",
        "SE": "Swedia",
        "SG": "Singapura",
        "SJ": "Kepulauan Svalbard dan Jan Mayen",
        "SS": "Sudan Selatan",
        "ST": "Sao Tome dan Principe",
        "SY": "Suriah",
        "TC": "Kepulauan Turks dan Caicos",
        "TD": "Cad",
        "TF": "Wilayah Kutub Selatan Prancis",
        "TL": "Timor Leste",
        "TM": "Turkimenistan",
        "TR": "Turki",
        "TT": "Trinidad dan Tobago",
        "UA": "Ukraina",
        "UM": "Kepulauan Terluar A.S.",
        "US": "Amerika Serikat",
        "VA": "Vatikan",
        "VC": "Saint Vincent dan Grenadines",
        "VG": "Kepulauan Virgin Inggris",
        "VI": "Kepulauan Virgin A.S.",
        "WF": "Kepulauan Wallis dan Futuna",
        "YE": "Yaman",
        "ZA": "Afrika Selatan",
        "ZZ": "Wilayah Tidak Dikenal"
    };
  }-*/;
}
