/*
 * 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 "cy" locale.
 */
public class LocalizedNamesImpl_cy extends LocalizedNamesImpl {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "Y Byd");
    namesMap.put("002", "Affrica");
    namesMap.put("003", "Gogledd America");
    namesMap.put("005", "De America");
    namesMap.put("011", "Gorllewin Affrica");
    namesMap.put("013", "Canolbarth America");
    namesMap.put("014", "Dwyrain Affrica");
    namesMap.put("015", "Gogledd Affrica");
    namesMap.put("017", "Canol Affrica");
    namesMap.put("018", "Deheudir Affrica");
    namesMap.put("019", "Yr Amerig");
    namesMap.put("021", "America i’r Gogledd o Fecsico");
    namesMap.put("029", "Y Caribî");
    namesMap.put("030", "Dwyrain Asia");
    namesMap.put("034", "De Asia");
    namesMap.put("035", "De-Ddwyrain Asia");
    namesMap.put("039", "De Ewrop");
    namesMap.put("053", "Awstralasia");
    namesMap.put("057", "Rhanbarth Micronesia");
    namesMap.put("143", "Canol Asia");
    namesMap.put("145", "Gorllewin Asia");
    namesMap.put("150", "Ewrop");
    namesMap.put("151", "Dwyrain Ewrop");
    namesMap.put("154", "Gogledd Ewrop");
    namesMap.put("155", "Gorllewin Ewrop");
    namesMap.put("202", "Affrica Is-Sahara");
    namesMap.put("419", "America Ladin");
    namesMap.put("AC", "Ynys Ascension");
    namesMap.put("AE", "Emiradau Arabaidd Unedig");
    namesMap.put("AG", "Antigua a Barbuda");
    namesMap.put("AR", "Yr Ariannin");
    namesMap.put("AS", "Samoa America");
    namesMap.put("AT", "Awstria");
    namesMap.put("AU", "Awstralia");
    namesMap.put("AX", "Ynysoedd Åland");
    namesMap.put("BE", "Gwlad Belg");
    namesMap.put("BG", "Bwlgaria");
    namesMap.put("BL", "Saint Barthélemy");
    namesMap.put("BO", "Bolifia");
    namesMap.put("BQ", "Antilles yr Iseldiroedd");
    namesMap.put("BR", "Brasil");
    namesMap.put("BS", "Y Bahamas");
    namesMap.put("BV", "Ynys Bouvet");
    namesMap.put("BY", "Belarws");
    namesMap.put("CC", "Ynysoedd Cocos (Keeling)");
    namesMap.put("CD", "Y Congo - Kinshasa");
    namesMap.put("CF", "Gweriniaeth Canolbarth Affrica");
    namesMap.put("CG", "Y Congo - Brazzaville");
    namesMap.put("CH", "Y Swistir");
    namesMap.put("CK", "Ynysoedd Cook");
    namesMap.put("CM", "Camerŵn");
    namesMap.put("CN", "Tsieina");
    namesMap.put("CP", "Ynys Clipperton");
    namesMap.put("CU", "Ciwba");
    namesMap.put("CV", "Cabo Verde");
    namesMap.put("CX", "Ynys y Nadolig");
    namesMap.put("CZ", "Tsiecia");
    namesMap.put("DE", "Yr Almaen");
    namesMap.put("DK", "Denmarc");
    namesMap.put("DO", "Gweriniaeth Dominica");
    namesMap.put("EA", "Ceuta a Melilla");
    namesMap.put("EG", "Yr Aifft");
    namesMap.put("EH", "Gorllewin Sahara");
    namesMap.put("ES", "Sbaen");
    namesMap.put("EU", "Yr Undeb Ewropeaidd");
    namesMap.put("EZ", "Ardal yr Ewro");
    namesMap.put("FI", "Y Ffindir");
    namesMap.put("FK", "Ynysoedd y Falkland/Malvinas");
    namesMap.put("FO", "Ynysoedd Ffaro");
    namesMap.put("FR", "Ffrainc");
    namesMap.put("GB", "Y Deyrnas Unedig");
    namesMap.put("GF", "Guyane Ffrengig");
    namesMap.put("GG", "Ynys y Garn");
    namesMap.put("GL", "Yr Ynys Las");
    namesMap.put("GN", "Guinée");
    namesMap.put("GQ", "Guinea Gyhydeddol");
    namesMap.put("GR", "Gwlad Groeg");
    namesMap.put("GS", "De Georgia ac Ynysoedd Sandwich y De");
    namesMap.put("GW", "Guiné-Bissau");
    namesMap.put("HK", "Hong Kong SAR Tseina");
    namesMap.put("HM", "Ynys Heard ac Ynysoedd McDonald");
    namesMap.put("HU", "Hwngari");
    namesMap.put("IC", "Yr Ynysoedd Dedwydd");
    namesMap.put("IE", "Iwerddon");
    namesMap.put("IM", "Ynys Manaw");
    namesMap.put("IO", "Tiriogaeth Brydeinig Cefnfor India");
    namesMap.put("IQ", "Irac");
    namesMap.put("IS", "Gwlad yr Iâ");
    namesMap.put("IT", "Yr Eidal");
    namesMap.put("JO", "Gwlad Iorddonen");
    namesMap.put("KN", "Saint Kitts a Nevis");
    namesMap.put("KP", "Gogledd Korea");
    namesMap.put("KR", "De Korea");
    namesMap.put("KY", "Ynysoedd Cayman");
    namesMap.put("KZ", "Kazakstan");
    namesMap.put("LB", "Libanus");
    namesMap.put("LC", "Saint Lucia");
    namesMap.put("LU", "Lwcsembwrg");
    namesMap.put("LV", "Latfia");
    namesMap.put("MA", "Moroco");
    namesMap.put("MD", "Moldofa");
    namesMap.put("MF", "Saint Martin");
    namesMap.put("MH", "Ynysoedd Marshall");
    namesMap.put("MO", "Macau RhGA Tsieina");
    namesMap.put("MP", "Ynysoedd Gogledd Mariana");
    namesMap.put("MV", "Y Maldives");
    namesMap.put("MX", "Mecsico");
    namesMap.put("NC", "Caledonia Newydd");
    namesMap.put("NF", "Ynys Norfolk");
    namesMap.put("NL", "Yr Iseldiroedd");
    namesMap.put("NO", "Norwy");
    namesMap.put("NZ", "Seland Newydd");
    namesMap.put("PE", "Periw");
    namesMap.put("PF", "Polynesia Ffrengig");
    namesMap.put("PG", "Papua Guinea Newydd");
    namesMap.put("PH", "Y Philipinau");
    namesMap.put("PL", "Gwlad Pwyl");
    namesMap.put("PM", "Saint-Pierre-et-Miquelon");
    namesMap.put("PN", "Ynysoedd Pitcairn");
    namesMap.put("PS", "Tiriogaethau Palesteinaidd");
    namesMap.put("PT", "Portiwgal");
    namesMap.put("QO", "Oceania Bellennig");
    namesMap.put("RO", "Rwmania");
    namesMap.put("RU", "Rwsia");
    namesMap.put("SB", "Ynysoedd Solomon");
    namesMap.put("SD", "Swdan");
    namesMap.put("SH", "Saint Helena");
    namesMap.put("SI", "Slofenia");
    namesMap.put("SJ", "Svalbard a Jan Mayen");
    namesMap.put("SK", "Slofacia");
    namesMap.put("SS", "De Swdan");
    namesMap.put("ST", "São Tomé a Príncipe");
    namesMap.put("SZ", "Gwlad Swazi");
    namesMap.put("TC", "Ynysoedd Turks a Caicos");
    namesMap.put("TD", "Tchad");
    namesMap.put("TF", "Tiroedd Deheuol ac Antarctig Ffrainc");
    namesMap.put("TH", "Gwlad Thai");
    namesMap.put("TR", "Twrci");
    namesMap.put("TT", "Trinidad a Tobago");
    namesMap.put("UA", "Wcráin");
    namesMap.put("UM", "Ynysoedd Pellennig UDA");
    namesMap.put("UN", "y Cenhedloedd Unedig");
    namesMap.put("US", "Yr Unol Daleithiau");
    namesMap.put("VA", "Y Fatican");
    namesMap.put("VC", "Saint Vincent a’r Grenadines");
    namesMap.put("VG", "Ynysoedd Gwyryf Prydain");
    namesMap.put("VI", "Ynysoedd Gwyryf yr Unol Daleithiau");
    namesMap.put("VN", "Fietnam");
    namesMap.put("WF", "Wallis a Futuna");
    namesMap.put("ZA", "De Affrica");
    namesMap.put("ZZ", "Rhanbarth Anhysbys");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "Y Byd",
        "002": "Affrica",
        "003": "Gogledd America",
        "005": "De America",
        "011": "Gorllewin Affrica",
        "013": "Canolbarth America",
        "014": "Dwyrain Affrica",
        "015": "Gogledd Affrica",
        "017": "Canol Affrica",
        "018": "Deheudir Affrica",
        "019": "Yr Amerig",
        "021": "America i’r Gogledd o Fecsico",
        "029": "Y Caribî",
        "030": "Dwyrain Asia",
        "034": "De Asia",
        "035": "De-Ddwyrain Asia",
        "039": "De Ewrop",
        "053": "Awstralasia",
        "057": "Rhanbarth Micronesia",
        "143": "Canol Asia",
        "145": "Gorllewin Asia",
        "150": "Ewrop",
        "151": "Dwyrain Ewrop",
        "154": "Gogledd Ewrop",
        "155": "Gorllewin Ewrop",
        "202": "Affrica Is-Sahara",
        "419": "America Ladin",
        "AC": "Ynys Ascension",
        "AE": "Emiradau Arabaidd Unedig",
        "AG": "Antigua a Barbuda",
        "AR": "Yr Ariannin",
        "AS": "Samoa America",
        "AT": "Awstria",
        "AU": "Awstralia",
        "AX": "Ynysoedd Åland",
        "BE": "Gwlad Belg",
        "BG": "Bwlgaria",
        "BL": "Saint Barthélemy",
        "BO": "Bolifia",
        "BQ": "Antilles yr Iseldiroedd",
        "BR": "Brasil",
        "BS": "Y Bahamas",
        "BV": "Ynys Bouvet",
        "BY": "Belarws",
        "CC": "Ynysoedd Cocos (Keeling)",
        "CD": "Y Congo - Kinshasa",
        "CF": "Gweriniaeth Canolbarth Affrica",
        "CG": "Y Congo - Brazzaville",
        "CH": "Y Swistir",
        "CK": "Ynysoedd Cook",
        "CM": "Camerŵn",
        "CN": "Tsieina",
        "CP": "Ynys Clipperton",
        "CU": "Ciwba",
        "CV": "Cabo Verde",
        "CX": "Ynys y Nadolig",
        "CZ": "Tsiecia",
        "DE": "Yr Almaen",
        "DK": "Denmarc",
        "DO": "Gweriniaeth Dominica",
        "EA": "Ceuta a Melilla",
        "EG": "Yr Aifft",
        "EH": "Gorllewin Sahara",
        "ES": "Sbaen",
        "EU": "Yr Undeb Ewropeaidd",
        "EZ": "Ardal yr Ewro",
        "FI": "Y Ffindir",
        "FK": "Ynysoedd y Falkland/Malvinas",
        "FO": "Ynysoedd Ffaro",
        "FR": "Ffrainc",
        "GB": "Y Deyrnas Unedig",
        "GF": "Guyane Ffrengig",
        "GG": "Ynys y Garn",
        "GL": "Yr Ynys Las",
        "GN": "Guinée",
        "GQ": "Guinea Gyhydeddol",
        "GR": "Gwlad Groeg",
        "GS": "De Georgia ac Ynysoedd Sandwich y De",
        "GW": "Guiné-Bissau",
        "HK": "Hong Kong SAR Tseina",
        "HM": "Ynys Heard ac Ynysoedd McDonald",
        "HU": "Hwngari",
        "IC": "Yr Ynysoedd Dedwydd",
        "IE": "Iwerddon",
        "IM": "Ynys Manaw",
        "IO": "Tiriogaeth Brydeinig Cefnfor India",
        "IQ": "Irac",
        "IS": "Gwlad yr Iâ",
        "IT": "Yr Eidal",
        "JO": "Gwlad Iorddonen",
        "KN": "Saint Kitts a Nevis",
        "KP": "Gogledd Korea",
        "KR": "De Korea",
        "KY": "Ynysoedd Cayman",
        "KZ": "Kazakstan",
        "LB": "Libanus",
        "LC": "Saint Lucia",
        "LU": "Lwcsembwrg",
        "LV": "Latfia",
        "MA": "Moroco",
        "MD": "Moldofa",
        "MF": "Saint Martin",
        "MH": "Ynysoedd Marshall",
        "MO": "Macau RhGA Tsieina",
        "MP": "Ynysoedd Gogledd Mariana",
        "MV": "Y Maldives",
        "MX": "Mecsico",
        "NC": "Caledonia Newydd",
        "NF": "Ynys Norfolk",
        "NL": "Yr Iseldiroedd",
        "NO": "Norwy",
        "NZ": "Seland Newydd",
        "PE": "Periw",
        "PF": "Polynesia Ffrengig",
        "PG": "Papua Guinea Newydd",
        "PH": "Y Philipinau",
        "PL": "Gwlad Pwyl",
        "PM": "Saint-Pierre-et-Miquelon",
        "PN": "Ynysoedd Pitcairn",
        "PS": "Tiriogaethau Palesteinaidd",
        "PT": "Portiwgal",
        "QO": "Oceania Bellennig",
        "RO": "Rwmania",
        "RU": "Rwsia",
        "SB": "Ynysoedd Solomon",
        "SD": "Swdan",
        "SH": "Saint Helena",
        "SI": "Slofenia",
        "SJ": "Svalbard a Jan Mayen",
        "SK": "Slofacia",
        "SS": "De Swdan",
        "ST": "São Tomé a Príncipe",
        "SZ": "Gwlad Swazi",
        "TC": "Ynysoedd Turks a Caicos",
        "TD": "Tchad",
        "TF": "Tiroedd Deheuol ac Antarctig Ffrainc",
        "TH": "Gwlad Thai",
        "TR": "Twrci",
        "TT": "Trinidad a Tobago",
        "UA": "Wcráin",
        "UM": "Ynysoedd Pellennig UDA",
        "UN": "y Cenhedloedd Unedig",
        "US": "Yr Unol Daleithiau",
        "VA": "Y Fatican",
        "VC": "Saint Vincent a’r Grenadines",
        "VG": "Ynysoedd Gwyryf Prydain",
        "VI": "Ynysoedd Gwyryf yr Unol Daleithiau",
        "VN": "Fietnam",
        "WF": "Wallis a Futuna",
        "ZA": "De Affrica",
        "ZZ": "Rhanbarth Anhysbys"
    };
  }-*/;
}
