/*
 * Copyright 2010 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;

// DO NOT EDIT - GENERATED FROM CLDR AND ICU DATA

/**
 * 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[] 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[] weekdaysShort() {
    return new String[] {
        "ཉི་མ་",
        "ཟླ་བ་",
        "མིག་དམར་",
        "ཧླག་པ་",
        "ཕུར་བུ་",
        "སངས་",
        "སྤེན་པ་"
    };
  }
}
