/*
 * 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",
        "XA",
        "XB",
        "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": "راساگە نادیار"
    };
  }-*/;
}
