/*
 * 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",
        "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("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("BA", "Bosnia a Herzegovina");
    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 RhGA Tsieina");
    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",
        "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",
        "BA": "Bosnia a Herzegovina",
        "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 RhGA Tsieina",
        "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"
    };
  }-*/;
}
