/*
 * 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.shared.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 dateFormatFull() {
    return "y MMMMའི་ཚེས་d, EEEE";
  }

  @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 formatMonthAbbrevDay() {
    return "MMMཚེས་d";
  }

  @Override
  public String formatMonthFullDay() {
    return "MMMMའི་ཚེས་d";
  }

  @Override
  public String formatMonthFullWeekdayDay() {
    return "MMMMཚེས་d, EEEE";
  }

  @Override
  public String formatYearMonthAbbrev() {
    return "y LLL";
  }

  @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[] monthsFullStandalone() {
    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 timeFormatFull() {
    return "h:mm:ss a zzzz";
  }

  @Override
  public String timeFormatLong() {
    return "h:mm:ss a z";
  }

  @Override
  public String timeFormatMedium() {
    return "h:mm:ss a";
  }

  @Override
  public String timeFormatShort() {
    return "h:mm a";
  }

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

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

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