/*
 * 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:
//  cldrVersion=21.0
//  number=$Revision: 6546 $
//  type=root
//  date=$Date: 2012-02-07 13:32:35 -0500 (Tue, 07 Feb 2012) $


/**
 * Localized names for the "kk" locale.
 */
public class LocalizedNamesImpl_kk extends LocalizedNamesImpl {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "Әлем");
    namesMap.put("002", "Африка");
    namesMap.put("003", "Солтүстік Америка");
    namesMap.put("005", "Оңтүстік Америка");
    namesMap.put("009", "Океания");
    namesMap.put("011", "Батыс Африка");
    namesMap.put("013", "Орталық Америка");
    namesMap.put("014", "Шығыс Африка");
    namesMap.put("015", "Солтүстік Африка");
    namesMap.put("017", "Орталық Африка");
    namesMap.put("018", "Оңтүстік Африка");
    namesMap.put("019", "Америкалар");
    namesMap.put("021", "Солтүстік Америка (АҚШ, Канада, Гренландия және Бермуд аралдары)");
    namesMap.put("029", "Кариб");
    namesMap.put("030", "Шығыс Азия");
    namesMap.put("034", "Оңтүстік Азия");
    namesMap.put("035", "Оңтүстік-шығыс Азия");
    namesMap.put("039", "Оңтүстік Еуропа");
    namesMap.put("053", "Австралия және Жаңа Зеландия");
    namesMap.put("054", "Меланезия");
    namesMap.put("057", "Микронезия регионы");
    namesMap.put("061", "Полинезия");
    namesMap.put("142", "Азия");
    namesMap.put("143", "Орталық Азия");
    namesMap.put("145", "Батыс Азия");
    namesMap.put("150", "Еуропа");
    namesMap.put("151", "Шығыс Еуропа");
    namesMap.put("154", "Солтүстік Еуропа");
    namesMap.put("155", "Батыс Еуропа");
    namesMap.put("419", "Латын Америкасы");
    namesMap.put("AD", "Андорра");
    namesMap.put("AE", "Біріккен Араб Эмираттары");
    namesMap.put("AF", "Ауғанстан");
    namesMap.put("AL", "Албания");
    namesMap.put("AM", "Армения");
    namesMap.put("AO", "Ангола");
    namesMap.put("AQ", "Антарктика");
    namesMap.put("AR", "Аргентина");
    namesMap.put("AT", "Австрия");
    namesMap.put("AU", "Австралия");
    namesMap.put("AW", "Аруба");
    namesMap.put("AZ", "Әзербайжан");
    namesMap.put("BA", "Босния және Герцеговина");
    namesMap.put("BB", "Барбадос");
    namesMap.put("BD", "Бангладеш");
    namesMap.put("BE", "Бельгия");
    namesMap.put("BG", "Болгария");
    namesMap.put("BH", "Бахрейн");
    namesMap.put("BI", "Бурунди");
    namesMap.put("BJ", "Бенин");
    namesMap.put("BO", "Боливия");
    namesMap.put("BR", "Бразилия");
    namesMap.put("BT", "Бутан");
    namesMap.put("BW", "Ботсвана");
    namesMap.put("BY", "Беларусь");
    namesMap.put("BZ", "Белиз");
    namesMap.put("CA", "Канада");
    namesMap.put("CH", "Швейцария");
    namesMap.put("CL", "Чили");
    namesMap.put("CM", "Камерун");
    namesMap.put("CN", "Қытай");
    namesMap.put("CO", "Колумбия");
    namesMap.put("DE", "Алмания");
    namesMap.put("DK", "Дания");
    namesMap.put("ES", "Испания");
    namesMap.put("FI", "Финляндия");
    namesMap.put("FR", "Франция");
    namesMap.put("GB", "Ұлыбритания");
    namesMap.put("GR", "Грекия");
    namesMap.put("HK", "Гонконг (арнайы әкімшілік аймақ)");
    namesMap.put("ID", "Индонезия");
    namesMap.put("IE", "Ирландия");
    namesMap.put("IN", "Индия");
    namesMap.put("IT", "Италия");
    namesMap.put("JP", "Жапония");
    namesMap.put("KR", "Солтүстік Корея");
    namesMap.put("KZ", "Қазақстан");
    namesMap.put("MX", "Мексика");
    namesMap.put("NL", "Голландия");
    namesMap.put("NO", "Норвегия");
    namesMap.put("PL", "Польша");
    namesMap.put("PT", "Португалия");
    namesMap.put("RU", "Ресей");
    namesMap.put("SA", "Сауд Арабиясы");
    namesMap.put("SE", "Швеция");
    namesMap.put("TH", "Тайланд");
    namesMap.put("TO", "Тонга");
    namesMap.put("TR", "Түркия");
    namesMap.put("TW", "Тайвань");
    namesMap.put("US", "АҚШ");
    namesMap.put("ZA", "Оңтүстік Африка республикасы");
    namesMap.put("ZZ", "Белгісіз аймақ");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "Әлем",
        "002": "Африка",
        "003": "Солтүстік Америка",
        "005": "Оңтүстік Америка",
        "009": "Океания",
        "011": "Батыс Африка",
        "013": "Орталық Америка",
        "014": "Шығыс Африка",
        "015": "Солтүстік Африка",
        "017": "Орталық Африка",
        "018": "Оңтүстік Африка",
        "019": "Америкалар",
        "021": "Солтүстік Америка (АҚШ, Канада, Гренландия және Бермуд аралдары)",
        "029": "Кариб",
        "030": "Шығыс Азия",
        "034": "Оңтүстік Азия",
        "035": "Оңтүстік-шығыс Азия",
        "039": "Оңтүстік Еуропа",
        "053": "Австралия және Жаңа Зеландия",
        "054": "Меланезия",
        "057": "Микронезия регионы",
        "061": "Полинезия",
        "142": "Азия",
        "143": "Орталық Азия",
        "145": "Батыс Азия",
        "150": "Еуропа",
        "151": "Шығыс Еуропа",
        "154": "Солтүстік Еуропа",
        "155": "Батыс Еуропа",
        "419": "Латын Америкасы",
        "AD": "Андорра",
        "AE": "Біріккен Араб Эмираттары",
        "AF": "Ауғанстан",
        "AL": "Албания",
        "AM": "Армения",
        "AO": "Ангола",
        "AQ": "Антарктика",
        "AR": "Аргентина",
        "AT": "Австрия",
        "AU": "Австралия",
        "AW": "Аруба",
        "AZ": "Әзербайжан",
        "BA": "Босния және Герцеговина",
        "BB": "Барбадос",
        "BD": "Бангладеш",
        "BE": "Бельгия",
        "BG": "Болгария",
        "BH": "Бахрейн",
        "BI": "Бурунди",
        "BJ": "Бенин",
        "BO": "Боливия",
        "BR": "Бразилия",
        "BT": "Бутан",
        "BW": "Ботсвана",
        "BY": "Беларусь",
        "BZ": "Белиз",
        "CA": "Канада",
        "CH": "Швейцария",
        "CL": "Чили",
        "CM": "Камерун",
        "CN": "Қытай",
        "CO": "Колумбия",
        "DE": "Алмания",
        "DK": "Дания",
        "ES": "Испания",
        "FI": "Финляндия",
        "FR": "Франция",
        "GB": "Ұлыбритания",
        "GR": "Грекия",
        "HK": "Гонконг (арнайы әкімшілік аймақ)",
        "ID": "Индонезия",
        "IE": "Ирландия",
        "IN": "Индия",
        "IT": "Италия",
        "JP": "Жапония",
        "KR": "Солтүстік Корея",
        "KZ": "Қазақстан",
        "MX": "Мексика",
        "NL": "Голландия",
        "NO": "Норвегия",
        "PL": "Польша",
        "PT": "Португалия",
        "RU": "Ресей",
        "SA": "Сауд Арабиясы",
        "SE": "Швеция",
        "TH": "Тайланд",
        "TO": "Тонга",
        "TR": "Түркия",
        "TW": "Тайвань",
        "US": "АҚШ",
        "ZA": "Оңтүстік Африка республикасы",
        "ZZ": "Белгісіз аймақ"
    };
  }-*/;
}
