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


/**
 * Localized names for the "so" locale.
 */
public class LocalizedNamesImpl_so extends LocalizedNamesImpl {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("014", "Afrikada Bari");
    namesMap.put("030", "Aasiyada Bari");
    namesMap.put("151", "Yurubta Bari");
    namesMap.put("AD", "Andora");
    namesMap.put("AE", "Imaaraadka Carabta ee Midoobay");
    namesMap.put("AF", "Afgaanistaan");
    namesMap.put("AG", "Antigua iyo Barbuda");
    namesMap.put("AL", "Albaaniya");
    namesMap.put("AM", "Armeeniya");
    namesMap.put("AO", "Angoola");
    namesMap.put("AR", "Arjantiin");
    namesMap.put("AS", "Samowa Ameerika");
    namesMap.put("AT", "Awsteriya");
    namesMap.put("AU", "Awstaraaliya");
    namesMap.put("AZ", "Azerbajaan");
    namesMap.put("BA", "Bosniya Hersigoviina");
    namesMap.put("BB", "Baarbadoos");
    namesMap.put("BD", "Bangaaladheesh");
    namesMap.put("BE", "Biljam");
    namesMap.put("BF", "Burkiina Faaso");
    namesMap.put("BG", "Bulgaariya");
    namesMap.put("BH", "Baxreyn");
    namesMap.put("BJ", "Biniin");
    namesMap.put("BM", "Bermuuda");
    namesMap.put("BN", "Buruneeya");
    namesMap.put("BO", "Boliifiya");
    namesMap.put("BR", "Braasiil");
    namesMap.put("BS", "Bahaamas");
    namesMap.put("BW", "Botuswaana");
    namesMap.put("CA", "Kanada");
    namesMap.put("CD", "Jamhuuriyadda Dimuquraadiga Kongo");
    namesMap.put("CF", "Jamhuuriyadda Afrikada Dhexe");
    namesMap.put("CG", "Kongo");
    namesMap.put("CH", "Swiiserlaand");
    namesMap.put("CI", "Ivory coast");
    namesMap.put("CK", "Jaziiradda Cook");
    namesMap.put("CL", "Jili");
    namesMap.put("CM", "Kaameruun");
    namesMap.put("CN", "Shiinaha");
    namesMap.put("CO", "Kolombiya");
    namesMap.put("CR", "Kosta Riika");
    namesMap.put("CS", "serbiya iyo Monteneegro");
    namesMap.put("CU", "Kuuba");
    namesMap.put("CV", "Cape Verde Islands");
    namesMap.put("CY", "Qubrus");
    namesMap.put("CZ", "Jamhuuriyadda Jek");
    namesMap.put("DE", "Jarmal");
    namesMap.put("DJ", "Jabuuti");
    namesMap.put("DM", "Domeenika");
    namesMap.put("DO", "Jamhuuriyadda Domeenika");
    namesMap.put("DZ", "Aljeeriya");
    namesMap.put("EC", "Ikuwadoor");
    namesMap.put("EE", "Estooniya");
    namesMap.put("EG", "Masar");
    namesMap.put("ER", "Eretereeya");
    namesMap.put("ES", "Isbeyn");
    namesMap.put("ET", "Itoobiya");
    namesMap.put("FK", "Jaziiradaha Fooklaan");
    namesMap.put("FR", "Faransiis");
    namesMap.put("GA", "Gaaboon");
    namesMap.put("GD", "Giriinaada");
    namesMap.put("GE", "Joorjiya");
    namesMap.put("GH", "Gaana");
    namesMap.put("GM", "Gambiya");
    namesMap.put("GN", "Gini");
    namesMap.put("GR", "Giriig");
    namesMap.put("GT", "Guwaatamaala");
    namesMap.put("GW", "Gini-Bisaaw");
    namesMap.put("HR", "Korweeshiya");
    namesMap.put("HT", "Hayti");
    namesMap.put("HU", "Hangeri");
    namesMap.put("ID", "Indoneesiya");
    namesMap.put("IE", "Ayrlaand");
    namesMap.put("IL", "Israaʼiil");
    namesMap.put("IN", "Hindiya");
    namesMap.put("IQ", "Ciraaq");
    namesMap.put("IR", "Iiraan");
    namesMap.put("IS", "Iislaand");
    namesMap.put("IT", "Talyaani");
    namesMap.put("JM", "Jameyka");
    namesMap.put("JO", "Urdun");
    namesMap.put("JP", "Jabaan");
    namesMap.put("KE", "Kiiniya");
    namesMap.put("KG", "Kirgistaan");
    namesMap.put("KH", "Kamboodiya");
    namesMap.put("KM", "Komooros");
    namesMap.put("KP", "Kuuriyada Waqooyi");
    namesMap.put("KR", "Kuuriyada Koonfureed");
    namesMap.put("KW", "Kuwayt");
    namesMap.put("KZ", "Kasaakhistaan");
    namesMap.put("LB", "Lubnaan");
    namesMap.put("LK", "Sirilaanka");
    namesMap.put("LR", "Laybeeriya");
    namesMap.put("LS", "Losooto");
    namesMap.put("LT", "Lituweeniya");
    namesMap.put("LU", "Luksemboorg");
    namesMap.put("LV", "Latfiya");
    namesMap.put("LY", "Liibiya");
    namesMap.put("MA", "Marooko");
    namesMap.put("MC", "Moonako");
    namesMap.put("MD", "Moldofa");
    namesMap.put("MG", "Madagaskar");
    namesMap.put("MK", "Makadooniya");
    namesMap.put("ML", "Maali");
    namesMap.put("MM", "Myanmar");
    namesMap.put("MN", "Mongooliya");
    namesMap.put("MR", "Muritaaniya");
    namesMap.put("MT", "Maalda");
    namesMap.put("MU", "Murishiyoos");
    namesMap.put("MV", "Maaldiqeen");
    namesMap.put("MW", "Malaawi");
    namesMap.put("MX", "Meksiko");
    namesMap.put("MZ", "Musambiig");
    namesMap.put("NA", "Namiibiya");
    namesMap.put("NE", "Nayjer");
    namesMap.put("NG", "Nayjeeriya");
    namesMap.put("NI", "Nikaraaguwa");
    namesMap.put("NO", "Noorweey");
    namesMap.put("NP", "Nebaal");
    namesMap.put("NZ", "Neyuusilaand");
    namesMap.put("OM", "Cumaan");
    namesMap.put("PH", "Filibiin");
    namesMap.put("PK", "Bakistaan");
    namesMap.put("PL", "Booland");
    namesMap.put("PN", "Pitcairn");
    namesMap.put("PS", "Falastiin Daanka galbeed iyo Qasa");
    namesMap.put("PT", "Bortuqaal");
    namesMap.put("QA", "Qadar");
    namesMap.put("RO", "Rumaaniya");
    namesMap.put("RU", "Ruush");
    namesMap.put("RW", "Ruwanda");
    namesMap.put("SA", "Sacuudi Carabiya");
    namesMap.put("SC", "Sishelis");
    namesMap.put("SD", "Suudaan");
    namesMap.put("SE", "Iswidhan");
    namesMap.put("SG", "Singaboor");
    namesMap.put("SL", "Siraaliyoon");
    namesMap.put("SN", "Sinigaal");
    namesMap.put("SO", "Soomaaliya");
    namesMap.put("SY", "Suuriya");
    namesMap.put("SZ", "Iswaasilaand");
    namesMap.put("TD", "Jaad");
    namesMap.put("TG", "Toogo");
    namesMap.put("TH", "Taylaand");
    namesMap.put("TL", "Timorka bari");
    namesMap.put("TN", "Tuniisiya");
    namesMap.put("TR", "Turki");
    namesMap.put("TW", "Taywaan");
    namesMap.put("TZ", "Tansaaniya");
    namesMap.put("UA", "Ukrayn");
    namesMap.put("UG", "Ugaanda");
    namesMap.put("US", "Maraykanka");
    namesMap.put("UY", "Uruguwaay");
    namesMap.put("UZ", "Uusbakistaan");
    namesMap.put("VA", "Faatikaan");
    namesMap.put("VE", "Fenisuweela");
    namesMap.put("VN", "Fiyetnaam");
    namesMap.put("YE", "Yaman");
    namesMap.put("ZA", "Koonfur Afrika");
    namesMap.put("ZM", "Saambiya");
    namesMap.put("ZW", "Simbaabwe");
    namesMap.put("ZZ", "Far aan la aqoon amase aan saxnayn");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "014": "Afrikada Bari",
        "030": "Aasiyada Bari",
        "151": "Yurubta Bari",
        "AD": "Andora",
        "AE": "Imaaraadka Carabta ee Midoobay",
        "AF": "Afgaanistaan",
        "AG": "Antigua iyo Barbuda",
        "AL": "Albaaniya",
        "AM": "Armeeniya",
        "AO": "Angoola",
        "AR": "Arjantiin",
        "AS": "Samowa Ameerika",
        "AT": "Awsteriya",
        "AU": "Awstaraaliya",
        "AZ": "Azerbajaan",
        "BA": "Bosniya Hersigoviina",
        "BB": "Baarbadoos",
        "BD": "Bangaaladheesh",
        "BE": "Biljam",
        "BF": "Burkiina Faaso",
        "BG": "Bulgaariya",
        "BH": "Baxreyn",
        "BJ": "Biniin",
        "BM": "Bermuuda",
        "BN": "Buruneeya",
        "BO": "Boliifiya",
        "BR": "Braasiil",
        "BS": "Bahaamas",
        "BW": "Botuswaana",
        "CA": "Kanada",
        "CD": "Jamhuuriyadda Dimuquraadiga Kongo",
        "CF": "Jamhuuriyadda Afrikada Dhexe",
        "CG": "Kongo",
        "CH": "Swiiserlaand",
        "CI": "Ivory coast",
        "CK": "Jaziiradda Cook",
        "CL": "Jili",
        "CM": "Kaameruun",
        "CN": "Shiinaha",
        "CO": "Kolombiya",
        "CR": "Kosta Riika",
        "CS": "serbiya iyo Monteneegro",
        "CU": "Kuuba",
        "CV": "Cape Verde Islands",
        "CY": "Qubrus",
        "CZ": "Jamhuuriyadda Jek",
        "DE": "Jarmal",
        "DJ": "Jabuuti",
        "DM": "Domeenika",
        "DO": "Jamhuuriyadda Domeenika",
        "DZ": "Aljeeriya",
        "EC": "Ikuwadoor",
        "EE": "Estooniya",
        "EG": "Masar",
        "ER": "Eretereeya",
        "ES": "Isbeyn",
        "ET": "Itoobiya",
        "FK": "Jaziiradaha Fooklaan",
        "FR": "Faransiis",
        "GA": "Gaaboon",
        "GD": "Giriinaada",
        "GE": "Joorjiya",
        "GH": "Gaana",
        "GM": "Gambiya",
        "GN": "Gini",
        "GR": "Giriig",
        "GT": "Guwaatamaala",
        "GW": "Gini-Bisaaw",
        "HR": "Korweeshiya",
        "HT": "Hayti",
        "HU": "Hangeri",
        "ID": "Indoneesiya",
        "IE": "Ayrlaand",
        "IL": "Israaʼiil",
        "IN": "Hindiya",
        "IQ": "Ciraaq",
        "IR": "Iiraan",
        "IS": "Iislaand",
        "IT": "Talyaani",
        "JM": "Jameyka",
        "JO": "Urdun",
        "JP": "Jabaan",
        "KE": "Kiiniya",
        "KG": "Kirgistaan",
        "KH": "Kamboodiya",
        "KM": "Komooros",
        "KP": "Kuuriyada Waqooyi",
        "KR": "Kuuriyada Koonfureed",
        "KW": "Kuwayt",
        "KZ": "Kasaakhistaan",
        "LB": "Lubnaan",
        "LK": "Sirilaanka",
        "LR": "Laybeeriya",
        "LS": "Losooto",
        "LT": "Lituweeniya",
        "LU": "Luksemboorg",
        "LV": "Latfiya",
        "LY": "Liibiya",
        "MA": "Marooko",
        "MC": "Moonako",
        "MD": "Moldofa",
        "MG": "Madagaskar",
        "MK": "Makadooniya",
        "ML": "Maali",
        "MM": "Myanmar",
        "MN": "Mongooliya",
        "MR": "Muritaaniya",
        "MT": "Maalda",
        "MU": "Murishiyoos",
        "MV": "Maaldiqeen",
        "MW": "Malaawi",
        "MX": "Meksiko",
        "MZ": "Musambiig",
        "NA": "Namiibiya",
        "NE": "Nayjer",
        "NG": "Nayjeeriya",
        "NI": "Nikaraaguwa",
        "NO": "Noorweey",
        "NP": "Nebaal",
        "NZ": "Neyuusilaand",
        "OM": "Cumaan",
        "PH": "Filibiin",
        "PK": "Bakistaan",
        "PL": "Booland",
        "PN": "Pitcairn",
        "PS": "Falastiin Daanka galbeed iyo Qasa",
        "PT": "Bortuqaal",
        "QA": "Qadar",
        "RO": "Rumaaniya",
        "RU": "Ruush",
        "RW": "Ruwanda",
        "SA": "Sacuudi Carabiya",
        "SC": "Sishelis",
        "SD": "Suudaan",
        "SE": "Iswidhan",
        "SG": "Singaboor",
        "SL": "Siraaliyoon",
        "SN": "Sinigaal",
        "SO": "Soomaaliya",
        "SY": "Suuriya",
        "SZ": "Iswaasilaand",
        "TD": "Jaad",
        "TG": "Toogo",
        "TH": "Taylaand",
        "TL": "Timorka bari",
        "TN": "Tuniisiya",
        "TR": "Turki",
        "TW": "Taywaan",
        "TZ": "Tansaaniya",
        "UA": "Ukrayn",
        "UG": "Ugaanda",
        "US": "Maraykanka",
        "UY": "Uruguwaay",
        "UZ": "Uusbakistaan",
        "VA": "Faatikaan",
        "VE": "Fenisuweela",
        "VN": "Fiyetnaam",
        "YE": "Yaman",
        "ZA": "Koonfur Afrika",
        "ZM": "Saambiya",
        "ZW": "Simbaabwe",
        "ZZ": "Far aan la aqoon amase aan saxnayn"
    };
  }-*/;
}
