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


/**
 * Localized names for the "rof" locale.
 */
public class LocalizedNamesImpl_rof extends LocalizedNamesImpl {

  @Override
  public String[] loadSortedRegionCodes() {
    return new String[] {
        "AC",
        "ZA",
        "AF",
        "IS",
        "AR",
        "AL",
        "DZ",
        "AM",
        "AD",
        "AO",
        "AI",
        "AG",
        "AN",
        "AQ",
        "AW",
        "AU",
        "AX",
        "IE",
        "AZ",
        "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",
        "DM",
        "EA",
        "EH",
        "EC",
        "SV",
        "IO",
        "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",
        "IM",
        "IN",
        "ID",
        "IQ",
        "IL",
        "IT",
        "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",
        "MU",
        "MR",
        "MA",
        "MZ",
        "MM",
        "NA",
        "NR",
        "NP",
        "NE",
        "NG",
        "NI",
        "NU",
        "NO",
        "NC",
        "NZ",
        "OM",
        "AT",
        "PK",
        "PW",
        "PA",
        "PG",
        "PY",
        "PE",
        "PN",
        "PL",
        "PF",
        "PR",
        "QO",
        "RE",
        "RO",
        "RS",
        "RW",
        "SM",
        "WS",
        "AS",
        "SH",
        "KN",
        "LC",
        "PM",
        "VC",
        "ST",
        "SA",
        "SN",
        "CS",
        "SC",
        "SL",
        "SG",
        "SY",
        "LK",
        "SJ",
        "SK",
        "SI",
        "SO",
        "SS",
        "SD",
        "SR",
        "SX",
        "TA",
        "TH",
        "TW",
        "TJ",
        "TZ",
        "TF",
        "TL",
        "TG",
        "TK",
        "TO",
        "TT",
        "TN",
        "TM",
        "TV",
        "IR",
        "BE",
        "FR",
        "FI",
        "UG",
        "GR",
        "ET",
        "NL",
        "GB",
        "DE",
        "PS",
        "UA",
        "UM",
        "PT",
        "UY",
        "RU",
        "SZ",
        "SE",
        "CH",
        "TR",
        "UZ",
        "VU",
        "VA",
        "VE",
        "VN",
        "CK",
        "FK",
        "KY",
        "MP",
        "MH",
        "SB",
        "TC",
        "VI",
        "VG",
        "WF",
        "YE",
        "JO",
        "ZM",
        "ZW",
    };
  }

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("AD", "Andoro");
    namesMap.put("AE", "Falme za Kiarabu");
    namesMap.put("AF", "Afuganistani");
    namesMap.put("AG", "Antigua na Babuda");
    namesMap.put("AI", "Anguila");
    namesMap.put("AM", "Amenia");
    namesMap.put("AN", "Antili za Uholanzi");
    namesMap.put("AO", "Angolo");
    namesMap.put("AR", "Ajentina");
    namesMap.put("AS", "Samoa ya Marekani");
    namesMap.put("AT", "Ostria");
    namesMap.put("AZ", "Azabajani");
    namesMap.put("BA", "Bosnia na Hezegovina");
    namesMap.put("BB", "Babado");
    namesMap.put("BD", "Bangladeshi");
    namesMap.put("BE", "Ubelgiji");
    namesMap.put("BF", "Bukinafaso");
    namesMap.put("BH", "Bahareni");
    namesMap.put("BJ", "Benini");
    namesMap.put("BR", "Brazili");
    namesMap.put("BS", "Bahamasi");
    namesMap.put("BT", "Butani");
    namesMap.put("BY", "Belarusi");
    namesMap.put("CA", "Kanada");
    namesMap.put("CD", "Jamhuri ya Kidemokrasia ya Kongo");
    namesMap.put("CF", "Jamhuri ya Afrika ya Kati");
    namesMap.put("CG", "Kongo");
    namesMap.put("CH", "Uswisi");
    namesMap.put("CI", "Kodivaa");
    namesMap.put("CK", "Visiwa vya Cook");
    namesMap.put("CM", "Kameruni");
    namesMap.put("CO", "Kolombia");
    namesMap.put("CR", "Kostarika");
    namesMap.put("CS", "Serbia na Montenegro");
    namesMap.put("CU", "Kuba");
    namesMap.put("CV", "Kepuvede");
    namesMap.put("CY", "Kuprosi");
    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("EG", "Misri");
    namesMap.put("ES", "Hispania");
    namesMap.put("ET", "Uhabeshi");
    namesMap.put("FI", "Ufini");
    namesMap.put("FK", "Visiwa vya Falkland");
    namesMap.put("FM", "Mikronesia");
    namesMap.put("FR", "Ufaransa");
    namesMap.put("GA", "Gaboni");
    namesMap.put("GB", "Uingereza");
    namesMap.put("GE", "Jojia");
    namesMap.put("GF", "Gwiyana ya Ufaransa");
    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", "Hondurasi");
    namesMap.put("HR", "Korasia");
    namesMap.put("HU", "Hungaria");
    namesMap.put("IE", "Ayalandi");
    namesMap.put("IL", "Israeli");
    namesMap.put("IO", "Eneo la Uingereza katika Bahari Hindi");
    namesMap.put("IQ", "Iraki");
    namesMap.put("IR", "Uajemi");
    namesMap.put("IS", "Aislandi");
    namesMap.put("IT", "Italia");
    namesMap.put("JM", "Jamaika");
    namesMap.put("JO", "Yordani");
    namesMap.put("JP", "Japani");
    namesMap.put("KG", "Kirigizistani");
    namesMap.put("KH", "Kambodia");
    namesMap.put("KM", "Komoro");
    namesMap.put("KN", "Santakitzi na Nevis");
    namesMap.put("KP", "Korea Kaskazini");
    namesMap.put("KR", "Korea Kusini");
    namesMap.put("KW", "Kuwaiti");
    namesMap.put("KY", "Visiwa vya Kaimai");
    namesMap.put("KZ", "Kazakistani");
    namesMap.put("LA", "Laosi");
    namesMap.put("LB", "Lebanoni");
    namesMap.put("LC", "Santalusia");
    namesMap.put("LI", "Lishenteni");
    namesMap.put("LK", "Sirilanka");
    namesMap.put("LS", "Lesoto");
    namesMap.put("LT", "Litwania");
    namesMap.put("LU", "Lasembagi");
    namesMap.put("LV", "Lativia");
    namesMap.put("MA", "Moroko");
    namesMap.put("MC", "Monako");
    namesMap.put("MG", "Bukini");
    namesMap.put("MH", "Visiwa vya Marshal");
    namesMap.put("MK", "Masedonia");
    namesMap.put("MM", "Myama");
    namesMap.put("MP", "Visiwa vya Mariana vya Kaskazini");
    namesMap.put("MQ", "Martiniki");
    namesMap.put("MR", "Moritania");
    namesMap.put("MS", "Montserrati");
    namesMap.put("MU", "Morisi");
    namesMap.put("MV", "Modivu");
    namesMap.put("MX", "Meksiko");
    namesMap.put("MY", "Malesia");
    namesMap.put("MZ", "Msumbiji");
    namesMap.put("NC", "Nyukaledonia");
    namesMap.put("NE", "Nijeri");
    namesMap.put("NF", "Kisiwa cha Norfok");
    namesMap.put("NG", "Nijeria");
    namesMap.put("NI", "Nikaragwa");
    namesMap.put("NL", "Uholanzi");
    namesMap.put("NO", "Norwe");
    namesMap.put("NP", "Nepali");
    namesMap.put("NZ", "Nyuzilandi");
    namesMap.put("OM", "Omani");
    namesMap.put("PF", "Polinesia ya Ufaransa");
    namesMap.put("PG", "Papua");
    namesMap.put("PH", "Filipino");
    namesMap.put("PK", "Pakistani");
    namesMap.put("PL", "Polandi");
    namesMap.put("PM", "Santapieri na Mikeloni");
    namesMap.put("PN", "Pitkairni");
    namesMap.put("PR", "Pwetoriko");
    namesMap.put("PS", "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina");
    namesMap.put("PT", "Ureno");
    namesMap.put("PY", "Paragwai");
    namesMap.put("QA", "Katari");
    namesMap.put("RE", "Riyunioni");
    namesMap.put("RU", "Urusi");
    namesMap.put("SA", "Saudi");
    namesMap.put("SB", "Visiwa vya Solomon");
    namesMap.put("SC", "Shelisheli");
    namesMap.put("SD", "Sudani");
    namesMap.put("SE", "Uswidi");
    namesMap.put("SG", "Singapoo");
    namesMap.put("SH", "Santahelena");
    namesMap.put("SL", "Siera Leoni");
    namesMap.put("SM", "Samarino");
    namesMap.put("SN", "Senegali");
    namesMap.put("SR", "Surinamu");
    namesMap.put("ST", "Sao Tome na Principe");
    namesMap.put("SV", "Elsavado");
    namesMap.put("SY", "Siria");
    namesMap.put("SZ", "Uswazi");
    namesMap.put("TC", "Visiwa vya Turki na Kaiko");
    namesMap.put("TD", "Chadi");
    namesMap.put("TH", "Tailandi");
    namesMap.put("TJ", "Tajikistani");
    namesMap.put("TL", "Timori ya Mashariki");
    namesMap.put("TM", "Turukimenistani");
    namesMap.put("TR", "Uturuki");
    namesMap.put("TT", "Trinidad na Tobago");
    namesMap.put("TW", "Taiwani");
    namesMap.put("UA", "Ukraini");
    namesMap.put("US", "Marekani");
    namesMap.put("UY", "Urugwai");
    namesMap.put("UZ", "Uzibekistani");
    namesMap.put("VA", "Vatikani");
    namesMap.put("VC", "Santavisenti na Grenadini");
    namesMap.put("VG", "Visiwa vya Virgin vya Uingereza");
    namesMap.put("VI", "Visiwa vya Virgin vya Marekani");
    namesMap.put("VN", "Vietinamu");
    namesMap.put("WF", "Walis na Futuna");
    namesMap.put("YE", "Yemeni");
    namesMap.put("ZA", "Afrika Kusini");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "AD": "Andoro",
        "AE": "Falme za Kiarabu",
        "AF": "Afuganistani",
        "AG": "Antigua na Babuda",
        "AI": "Anguila",
        "AM": "Amenia",
        "AN": "Antili za Uholanzi",
        "AO": "Angolo",
        "AR": "Ajentina",
        "AS": "Samoa ya Marekani",
        "AT": "Ostria",
        "AZ": "Azabajani",
        "BA": "Bosnia na Hezegovina",
        "BB": "Babado",
        "BD": "Bangladeshi",
        "BE": "Ubelgiji",
        "BF": "Bukinafaso",
        "BH": "Bahareni",
        "BJ": "Benini",
        "BR": "Brazili",
        "BS": "Bahamasi",
        "BT": "Butani",
        "BY": "Belarusi",
        "CA": "Kanada",
        "CD": "Jamhuri ya Kidemokrasia ya Kongo",
        "CF": "Jamhuri ya Afrika ya Kati",
        "CG": "Kongo",
        "CH": "Uswisi",
        "CI": "Kodivaa",
        "CK": "Visiwa vya Cook",
        "CM": "Kameruni",
        "CO": "Kolombia",
        "CR": "Kostarika",
        "CS": "Serbia na Montenegro",
        "CU": "Kuba",
        "CV": "Kepuvede",
        "CY": "Kuprosi",
        "CZ": "Jamhuri ya Cheki",
        "DE": "Ujerumani",
        "DJ": "Jibuti",
        "DK": "Denmaki",
        "DM": "Dominika",
        "DO": "Jamhuri ya Dominika",
        "DZ": "Aljeria",
        "EC": "Ekwado",
        "EG": "Misri",
        "ES": "Hispania",
        "ET": "Uhabeshi",
        "FI": "Ufini",
        "FK": "Visiwa vya Falkland",
        "FM": "Mikronesia",
        "FR": "Ufaransa",
        "GA": "Gaboni",
        "GB": "Uingereza",
        "GE": "Jojia",
        "GF": "Gwiyana ya Ufaransa",
        "GI": "Jibralta",
        "GL": "Grinlandi",
        "GN": "Gine",
        "GP": "Gwadelupe",
        "GQ": "Ginekweta",
        "GR": "Ugiriki",
        "GT": "Gwatemala",
        "GU": "Gwam",
        "GW": "Ginebisau",
        "HN": "Hondurasi",
        "HR": "Korasia",
        "HU": "Hungaria",
        "IE": "Ayalandi",
        "IL": "Israeli",
        "IO": "Eneo la Uingereza katika Bahari Hindi",
        "IQ": "Iraki",
        "IR": "Uajemi",
        "IS": "Aislandi",
        "IT": "Italia",
        "JM": "Jamaika",
        "JO": "Yordani",
        "JP": "Japani",
        "KG": "Kirigizistani",
        "KH": "Kambodia",
        "KM": "Komoro",
        "KN": "Santakitzi na Nevis",
        "KP": "Korea Kaskazini",
        "KR": "Korea Kusini",
        "KW": "Kuwaiti",
        "KY": "Visiwa vya Kaimai",
        "KZ": "Kazakistani",
        "LA": "Laosi",
        "LB": "Lebanoni",
        "LC": "Santalusia",
        "LI": "Lishenteni",
        "LK": "Sirilanka",
        "LS": "Lesoto",
        "LT": "Litwania",
        "LU": "Lasembagi",
        "LV": "Lativia",
        "MA": "Moroko",
        "MC": "Monako",
        "MG": "Bukini",
        "MH": "Visiwa vya Marshal",
        "MK": "Masedonia",
        "MM": "Myama",
        "MP": "Visiwa vya Mariana vya Kaskazini",
        "MQ": "Martiniki",
        "MR": "Moritania",
        "MS": "Montserrati",
        "MU": "Morisi",
        "MV": "Modivu",
        "MX": "Meksiko",
        "MY": "Malesia",
        "MZ": "Msumbiji",
        "NC": "Nyukaledonia",
        "NE": "Nijeri",
        "NF": "Kisiwa cha Norfok",
        "NG": "Nijeria",
        "NI": "Nikaragwa",
        "NL": "Uholanzi",
        "NO": "Norwe",
        "NP": "Nepali",
        "NZ": "Nyuzilandi",
        "OM": "Omani",
        "PF": "Polinesia ya Ufaransa",
        "PG": "Papua",
        "PH": "Filipino",
        "PK": "Pakistani",
        "PL": "Polandi",
        "PM": "Santapieri na Mikeloni",
        "PN": "Pitkairni",
        "PR": "Pwetoriko",
        "PS": "Ukingo wa Magharibi na Ukanda wa Gaza wa Palestina",
        "PT": "Ureno",
        "PY": "Paragwai",
        "QA": "Katari",
        "RE": "Riyunioni",
        "RU": "Urusi",
        "SA": "Saudi",
        "SB": "Visiwa vya Solomon",
        "SC": "Shelisheli",
        "SD": "Sudani",
        "SE": "Uswidi",
        "SG": "Singapoo",
        "SH": "Santahelena",
        "SL": "Siera Leoni",
        "SM": "Samarino",
        "SN": "Senegali",
        "SR": "Surinamu",
        "ST": "Sao Tome na Principe",
        "SV": "Elsavado",
        "SY": "Siria",
        "SZ": "Uswazi",
        "TC": "Visiwa vya Turki na Kaiko",
        "TD": "Chadi",
        "TH": "Tailandi",
        "TJ": "Tajikistani",
        "TL": "Timori ya Mashariki",
        "TM": "Turukimenistani",
        "TR": "Uturuki",
        "TT": "Trinidad na Tobago",
        "TW": "Taiwani",
        "UA": "Ukraini",
        "US": "Marekani",
        "UY": "Urugwai",
        "UZ": "Uzibekistani",
        "VA": "Vatikani",
        "VC": "Santavisenti na Grenadini",
        "VG": "Visiwa vya Virgin vya Uingereza",
        "VI": "Visiwa vya Virgin vya Marekani",
        "VN": "Vietinamu",
        "WF": "Walis na Futuna",
        "YE": "Yemeni",
        "ZA": "Afrika Kusini"
    };
  }-*/;
}
