/*
 * 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 "ru_UA" locale.
 */
public class LocalizedNamesImpl_ru_UA extends LocalizedNamesImpl_ru {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("AC", "О-в Вознесения");
    namesMap.put("AE", "Объединенные Арабские Эмираты");
    namesMap.put("BV", "О-в Буве");
    namesMap.put("CK", "О-ва Кука");
    namesMap.put("CP", "О-в Клиппертон");
    namesMap.put("CX", "О-в Рождества");
    namesMap.put("HM", "О-ва Херд и Макдональд");
    namesMap.put("NF", "О-в Норфолк");
    namesMap.put("TL", "Тимор-Лесте");
    namesMap.put("UM", "Малые Тихоокеанские Отдаленные Острова США");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "AC": "О-в Вознесения",
        "AE": "Объединенные Арабские Эмираты",
        "BV": "О-в Буве",
        "CK": "О-ва Кука",
        "CP": "О-в Клиппертон",
        "CX": "О-в Рождества",
        "HM": "О-ва Херд и Макдональд",
        "NF": "О-в Норфолк",
        "TL": "Тимор-Лесте",
        "UM": "Малые Тихоокеанские Отдаленные Острова США"
    };
  }-*/;
}
