/*
 * 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.shared.impl.cldr;

// DO NOT EDIT - GENERATED FROM CLDR AND ICU DATA
//  cldrVersion=25
//  date=$Date: 2013-08-29 04:32:04 +0200 (Thu, 29 Aug 2013) $
//  number=$Revision: 9287 $
//  type=bo

/**
 * Implementation of DateTimeFormatInfo for the "bo" locale.
 */
public class DateTimeFormatInfoImpl_bo extends DateTimeFormatInfoImpl {

  @Override
  public String[] ampms() {
    return new String[] {
        "སྔ་དྲོ་",
        "ཕྱི་དྲོ་"
    };
  }

  @Override
  public String dateFormatLong() {
    return "སྦྱི་ལོ་y MMMMའི་ཙེས་dད";
  }

  @Override
  public String dateFormatMedium() {
    return "y ལོ་འི་MMMཙེས་d";
  }

  @Override
  public String[] erasFull() {
    return new String[] {
        "སྤྱི་ལོ་སྔོན།",
        "སྤྱི་ལོ།"
    };
  }

  @Override
  public String[] erasShort() {
    return new String[] {
        "སྤྱི་ལོ་སྔོན།",
        "སྤྱི་ལོ།"
    };
  }

  @Override
  public int firstDayOfTheWeek() {
    return 0;
  }

  @Override
  public String formatYearMonthAbbrevDay() {
    return "y ལོ་འི་MMMཙེས་d";
  }

  @Override
  public String formatYearMonthFullDay() {
    return "སྦྱི་ལོ་y MMMMའི་ཙེས་dད";
  }

  @Override
  public String formatYearMonthNumDay() {
    return "y-M-d";
  }

  @Override
  public String[] monthsFull() {
    return new String[] {
        "ཟླ་བ་དང་པོ་",
        "ཟླ་བ་གཉིས་པ་",
        "ཟླ་བ་སུམ་པ་",
        "ཟླ་བ་བཞི་པ་",
        "ཟླ་བ་ལྔ་པ་",
        "ཟླ་བ་དྲུག་པ་",
        "ཟླ་བ་བདུན་པ་",
        "ཟླ་བ་བརྒྱད་པ་",
        "ཟླ་བ་དགུ་པ་",
        "ཟླ་བ་བཅུ་པ་",
        "ཟླ་བ་བཅུ་གཅིག་པ་",
        "ཟླ་བ་བཅུ་གཉིས་པ་"
    };
  }

  @Override
  public String[] monthsNarrow() {
    return new String[] {
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12"
    };
  }

  @Override
  public String[] monthsShort() {
    return new String[] {
        "ཟླ་༡",
        "ཟླ་༢",
        "ཟླ་༣",
        "ཟླ་༤",
        "ཟླ་༥",
        "ཟླ་༦",
        "ཟླ་༧",
        "ཟླ་༨",
        "ཟླ་༩",
        "ཟླ་༡༠",
        "ཟླ་༡༡",
        "ཟླ་༡༢"
    };
  }

  @Override
  public String[] quartersFull() {
    return new String[] {
        "དུས་ཚིགས་དང་པོ།",
        "དུས་ཚིགས་གཉིས་པ།",
        "་དུས་ཚིགས་གསུམ་པ།",
        "དུས་ཚིགས་བཞི་པ།"
    };
  }

  @Override
  public String[] quartersShort() {
    return new String[] {
        "དུས་ཚིགས་དང་པོ།",
        "དུས་ཚིགས་གཉིས་པ།",
        "་དུས་ཚིགས་གསུམ་པ།",
        "དུས་ཚིགས་བཞི་པ།"
    };
  }

  @Override
  public String[] weekdaysFull() {
    return new String[] {
        "གཟའ་ཉི་མ་",
        "གཟའ་ཟླ་བ་",
        "གཟའ་མིག་དམར་",
        "གཟའ་ཧླག་པ་",
        "གཟའ་ཕུར་བུ་",
        "གཟའ་སངས་",
        "གཟའ་སྤེན་པ་"
    };
  }

  @Override
  public String[] weekdaysNarrow() {
    return new String[] {
        "ཉི",
        "ཟླ",
        "མི",
        "ཧླག",
        "ཕུ",
        "ས",
        "སྤེ"
    };
  }

  @Override
  public String[] weekdaysNarrowStandalone() {
    return new String[] {
        "ཉི",
        "ཟླ",
        "མི",
        "ཧླ",
        "ཕུ",
        "ས",
        "སྤེ"
    };
  }

  @Override
  public String[] weekdaysShort() {
    return new String[] {
        "ཉི་མ་",
        "ཟླ་བ་",
        "མིག་དམར་",
        "ཧླག་པ་",
        "ཕུར་བུ་",
        "སངས་",
        "སྤེན་པ་"
    };
  }
}
