/*
 * 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
//  cldrVersion=21.0
//  number=$Revision: 6459 $
//  date=$Date: 2012-01-26 18:05:48 -0500 (Thu, 26 Jan 2012) $
//  type=root

/**
 * Implementation of DateTimeFormatInfo for the "ti_ER" locale.
 */
public class DateTimeFormatInfoImpl_ti_ER extends DateTimeFormatInfoImpl_ti {

  @Override
  public String dateFormatFull() {
    return "EEEE፡ dd MMMM መዓልቲ y G";
  }

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

  @Override
  public String[] monthsFull() {
    return new String[] {
        "ጥሪ",
        "ለካቲት",
        "መጋቢት",
        "ሚያዝያ",
        "ግንቦት",
        "ሰነ",
        "ሓምለ",
        "ነሓሰ",
        "መስከረም",
        "ጥቅምቲ",
        "ሕዳር",
        "ታሕሳስ"
    };
  }

  @Override
  public String[] monthsShort() {
    return new String[] {
        "ጥሪ",
        "ለካቲ",
        "መጋቢ",
        "ሚያዝ",
        "ግንቦ",
        "ሰነ",
        "ሓምለ",
        "ነሓሰ",
        "መስከ",
        "ጥቅም",
        "ሕዳር",
        "ታሕሳ"
    };
  }

  @Override
  public String[] weekdaysFull() {
    return new String[] {
        "ሰንበት",
        "ሰኑይ",
        "ሰሉስ",
        "ረቡዕ",
        "ሓሙስ",
        "ዓርቢ",
        "ቀዳም"
    };
  }

  @Override
  public String[] weekdaysShort() {
    return new String[] {
        "ሰንበት",
        "ሰኑይ",
        "ሰሉስ",
        "ረቡዕ",
        "ሓሙስ",
        "ዓርቢ",
        "ቀዳም"
    };
  }
}
