/*
 * Copyright 2014 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=25
//  date=$Date: 2013-07-20 19:27:45 +0200 (Sat, 20 Jul 2013) $
//  number=$Revision: 9061 $
//  type=MR

/**
 * Implementation of DateTimeFormatInfo for the "ar_MR" locale.
 */
public class DateTimeFormatInfoImpl_ar_MR 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[] {
        "يناير",
        "فبراير",
        "مارس",
        "إبريل",
        "مايو",
        "يونيو",
        "يوليو",
        "أغشت",
        "شتمبر",
        "أكتوبر",
        "نوفمبر",
        "دجمبر"
    };
  }
}
