/*
 * 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 "el_POLYTON" locale.
 */
public class DateTimeFormatInfoImpl_el_POLYTON extends DateTimeFormatInfoImpl_el {

  @Override
  public String[] monthsFull() {
    return new String[] {
        "Ιανουαρίου",
        "Φεβρουαρίου",
        "Μαρτίου",
        "Απριλίου",
        "Μαΐου",
        "Ιουνίου",
        "Ιουλίου",
        "Αὐγούστου",
        "Σεπτεμβρίου",
        "Ὀκτωβρίου",
        "Νοεμβρίου",
        "Δεκεμβρίου"
    };
  }

  @Override
  public String[] monthsFullStandalone() {
    return new String[] {
        "Ιανουάριος",
        "Φεβρουάριος",
        "Μάρτιος",
        "Απρίλιος",
        "Μάιος",
        "Ιούνιος",
        "Ιούλιος",
        "Αὔγουστος",
        "Σεπτέμβριος",
        "Ὀκτώβριος",
        "Νοέμβριος",
        "Δεκέμβριος"
    };
  }

  @Override
  public String[] monthsShort() {
    return new String[] {
        "Ιαν",
        "Φεβ",
        "Μαρ",
        "Απρ",
        "Μαϊ",
        "Ιουν",
        "Ιουλ",
        "Αὐγ",
        "Σεπ",
        "Ὀκτ",
        "Νοε",
        "Δεκ"
    };
  }
}
