/*
 * 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[] monthsFull() {
    return new String[] {
        "كانون الثاني",
        "شباط",
        "آذار",
        "نيسان",
        "أيار",
        "حزيران",
        "تموز",
        "آب",
        "أيلول",
        "تشرين الأول",
        "تشرين الثاني",
        "كانون الأول"
    };
  }

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

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