/*
 * 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[] {
        "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": "امریکی جزائر ورجن"
    };
  }-*/;
}
