/*
 * 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 "ha_Arab" locale.
 */
public class DateTimeFormatInfoImpl_ha_Arab extends DateTimeFormatInfoImpl_ha {

  @Override
  public String[] ampms() {
    return new String[] {
        "A.M.",
        "P.M."
    };
  }

  @Override
  public String[] erasFull() {
    return new String[] {
        "غَبَنِنْ مِلَدِ",
        "مِلَدِ"
    };
  }

  @Override
  public String[] erasShort() {
    return new String[] {
        "غَبَنِنْ مِلَدِ",
        "مِلَدِ"
    };
  }

  @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[] {
        "لَح",
        "لِت",
        "تَل",
        "لَر",
        "أَلْح",
        "جُم",
        "أَسَ"
    };
  }
}
