/*
 * 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: 6465 $
//  type=root
//  date=$Date: 2012-01-27 12:47:35 -0500 (Fri, 27 Jan 2012) $


/**
 * Localized names for the "zh_Hans_HK" locale.
 */
public class LocalizedNamesImpl_zh_Hans_HK extends LocalizedNamesImpl_zh_Hans {

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

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("CC", "科科斯（基林）群岛");
    namesMap.put("LA", "老挝");
    namesMap.put("ME", "黑山");
    namesMap.put("MQ", "马提尼克");
    namesMap.put("MS", "蒙特塞拉特");
    namesMap.put("SC", "塞舌尔");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "CC": "科科斯（基林）群岛",
        "LA": "老挝",
        "ME": "黑山",
        "MQ": "马提尼克",
        "MS": "蒙特塞拉特",
        "SC": "塞舌尔"
    };
  }-*/;
}
