/*
 * 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 "ar_LB" locale.
 */
public class DateTimeFormatInfoImpl_ar_LB extends DateTimeFormatInfoImpl_ar_001 {

  @Override
  public String dateFormatMedium() {
    return "MMM d, y";
  }

  @Override
  public String[] monthsFull() {
    return new String[] {
        "كانون الثاني",
        "شباط",
        "آذار",
        "نيسان",
        "أيار",
        "حزيران",
        "تموز",
        "آب",
        "أيلول",
        "تشرين الأول",
        "تشرين الثاني",
        "كانون الأول"
    };
  }

  @Override
  public String[] monthsNarrow() {
    return new String[] {
        "ك",
        "ش",
        "آ",
        "ن",
        "أ",
        "ح",
        "ت",
        "آ",
        "أ",
        "ت",
        "ت",
        "ك"
    };
  }

  @Override
  public String[] monthsShort() {
    return new String[] {
        "كانون الثاني",
        "شباط",
        "آذار",
        "نيسان",
        "أيار",
        "حزيران",
        "تموز",
        "آب",
        "أيلول",
        "تشرين الأول",
        "تشرين الثاني",
        "كانون الأول"
    };
  }
}
