/*
 * Copyright 2014 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=25
//  date=$Date: 2013-07-20 19:27:45 +0200 (Sat, 20 Jul 2013) $
//  number=$Revision: 9061 $
//  type=bo

/**
 * Localized names for the "bo_IN" locale.
 */
public class LocalizedNamesImpl_bo_IN extends LocalizedNamesImpl_bo {

  @Override
  protected void loadNameMapJava() {
    super.loadNameMapJava();
    namesMap.put("009", "ཨོཤི་ཡཱན་ན།");
  }

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

  private native JavaScriptObject loadMyNameMap() /*-{
    return {
        "009": "ཨོཤི་ཡཱན་ན།"
    };
  }-*/;
}
