/*
 * 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 "se_FI" locale.
 */
public class LocalizedNamesImpl_se_FI extends LocalizedNamesImpl_se {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("001", "Máilbmi");
    namesMap.put("002", "Afrihka");
    namesMap.put("003", "Davvi-Amerihká ja Gaska-Amerihká");
    namesMap.put("005", "Lulli-Amerihká");
    namesMap.put("011", "Oarje-Afrihká");
    namesMap.put("013", "Gaska-Amerihká");
    namesMap.put("014", "Nuorta-Afrihká");
    namesMap.put("015", "Davvi-Afrihká");
    namesMap.put("017", "Gaska-Afrihká");
    namesMap.put("018", "Lulli-Afrihká");
    namesMap.put("019", "Amerihka");
    namesMap.put("021", "Davvi-Amerihká");
    namesMap.put("057", "Mikronesia guovlu");
    namesMap.put("419", "Latiinnalaš Amerihká");
    namesMap.put("BA", "Bosnia ja Hercegovina");
    namesMap.put("EZ", "Euroavádat");
    namesMap.put("KH", "Kamboža");
    namesMap.put("SD", "Sudan");
    namesMap.put("TD", "Chad");
    namesMap.put("UN", "Ovttastuvvan Našuvnnat");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "001": "Máilbmi",
        "002": "Afrihka",
        "003": "Davvi-Amerihká ja Gaska-Amerihká",
        "005": "Lulli-Amerihká",
        "011": "Oarje-Afrihká",
        "013": "Gaska-Amerihká",
        "014": "Nuorta-Afrihká",
        "015": "Davvi-Afrihká",
        "017": "Gaska-Afrihká",
        "018": "Lulli-Afrihká",
        "019": "Amerihka",
        "021": "Davvi-Amerihká",
        "057": "Mikronesia guovlu",
        "419": "Latiinnalaš Amerihká",
        "BA": "Bosnia ja Hercegovina",
        "EZ": "Euroavádat",
        "KH": "Kamboža",
        "SD": "Sudan",
        "TD": "Chad",
        "UN": "Ovttastuvvan Našuvnnat"
    };
  }-*/;
}
