/*
 * 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 "ur_IN" locale.
 */
public class LocalizedNamesImpl_ur_IN extends LocalizedNamesImpl_ur {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("AC", "جزیرہ اسینشن");
    namesMap.put("AX", "جزائر آلینڈ");
    namesMap.put("BV", "جزیرہ بوویت");
    namesMap.put("CC", "جزائر (کیلنگ) کوکوس");
    namesMap.put("CK", "جزائر کک");
    namesMap.put("CP", "جزیرہ کلپرٹن");
    namesMap.put("DG", "ڈیگو گارشیا");
    namesMap.put("FK", "جزائر فاکلینڈ");
    namesMap.put("FO", "جزائر فیرو");
    namesMap.put("GF", "فرانسیسی گیانا");
    namesMap.put("HM", "جزائر ہرڈ و مکڈونلڈ");
    namesMap.put("IC", "جزائر کناری");
    namesMap.put("IO", "برطانوی بحرہند خطہ");
    namesMap.put("MH", "جزائر مارشل");
    namesMap.put("MP", "جزائر شمالی ماریانا");
    namesMap.put("NF", "جزیرہ نارفوک");
    namesMap.put("PN", "جزائر پٹکیرن");
    namesMap.put("SB", "جزائر سلیمان");
    namesMap.put("TA", "ترسٹان دا کونیا");
    namesMap.put("TC", "جزائر کیکس و ترکیہ");
    namesMap.put("UM", "امریکی بیرونی جزائر");
    namesMap.put("VG", "برطانوی جزائر ورجن");
    namesMap.put("VI", "امریکی جزائر ورجن");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "AC": "جزیرہ اسینشن",
        "AX": "جزائر آلینڈ",
        "BV": "جزیرہ بوویت",
        "CC": "جزائر (کیلنگ) کوکوس",
        "CK": "جزائر کک",
        "CP": "جزیرہ کلپرٹن",
        "DG": "ڈیگو گارشیا",
        "FK": "جزائر فاکلینڈ",
        "FO": "جزائر فیرو",
        "GF": "فرانسیسی گیانا",
        "HM": "جزائر ہرڈ و مکڈونلڈ",
        "IC": "جزائر کناری",
        "IO": "برطانوی بحرہند خطہ",
        "MH": "جزائر مارشل",
        "MP": "جزائر شمالی ماریانا",
        "NF": "جزیرہ نارفوک",
        "PN": "جزائر پٹکیرن",
        "SB": "جزائر سلیمان",
        "TA": "ترسٹان دا کونیا",
        "TC": "جزائر کیکس و ترکیہ",
        "UM": "امریکی بیرونی جزائر",
        "VG": "برطانوی جزائر ورجن",
        "VI": "امریکی جزائر ورجن"
    };
  }-*/;
}
