/*
 * 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 "ar_LY" locale.
 */
public class LocalizedNamesImpl_ar_LY extends LocalizedNamesImpl_ar {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("EA", "سبتة ومليلية");
    namesMap.put("MS", "مونتيسيرات");
    namesMap.put("UY", "أوروغواي");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "EA": "سبتة ومليلية",
        "MS": "مونتيسيرات",
        "UY": "أوروغواي"
    };
  }-*/;
}
