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

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "دونیا");
    namesMap.put("002", "ئفریقا");
    namesMap.put("003", "ئمریکا شومالی");
    namesMap.put("005", "ئمریکا ھارگە");
    namesMap.put("009", "ھوم پئڤأند جأھوٙن آڤ");
    namesMap.put("013", "مینجا ئمریکا");
    namesMap.put("019", "ئمریکا");
    namesMap.put("021", "ئمریکا ڤارو");
    namesMap.put("029", "کارائیب");
    namesMap.put("142", "آسیا");
    namesMap.put("150", "ئوروٙپا");
    namesMap.put("419", "ئمریکا لاتین");
    namesMap.put("BR", "بئرئزیل");
    namesMap.put("CN", "چین");
    namesMap.put("DE", "آلمان");
    namesMap.put("FR", "فأرانسە");
    namesMap.put("GB", "بیریتانیا گأپ");
    namesMap.put("IN", "ھئن");
    namesMap.put("IT", "ئیتالیا");
    namesMap.put("JP", "جاپوٙن");
    namesMap.put("RU", "روٙسیە");
    namesMap.put("US", "ڤولاتیا یأکاگئرتە");
    namesMap.put("ZZ", "راساگە نادیار");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "دونیا",
        "002": "ئفریقا",
        "003": "ئمریکا شومالی",
        "005": "ئمریکا ھارگە",
        "009": "ھوم پئڤأند جأھوٙن آڤ",
        "013": "مینجا ئمریکا",
        "019": "ئمریکا",
        "021": "ئمریکا ڤارو",
        "029": "کارائیب",
        "142": "آسیا",
        "150": "ئوروٙپا",
        "419": "ئمریکا لاتین",
        "BR": "بئرئزیل",
        "CN": "چین",
        "DE": "آلمان",
        "FR": "فأرانسە",
        "GB": "بیریتانیا گأپ",
        "IN": "ھئن",
        "IT": "ئیتالیا",
        "JP": "جاپوٙن",
        "RU": "روٙسیە",
        "US": "ڤولاتیا یأکاگئرتە",
        "ZZ": "راساگە نادیار"
    };
  }-*/;
}
