// This file was automatically generated by localedef.

package gnu.java.locale;

import java.util.ListResourceBundle;

public class LocaleInformation_fo_FO extends ListResourceBundle
{
  static final String decimalSeparator = LocaleInformation_da_DK.decimalSeparator;
  static final String groupingSeparator = LocaleInformation_da_DK.groupingSeparator;
  static final String numberFormat = LocaleInformation_da_DK.numberFormat;
  static final String percentFormat = LocaleInformation_da_DK.percentFormat;
  static final String[] weekdays = { null, "sunnudagur", "m\u00E1nadagur", "t\u00FDsdagur", "mikudagur", "h\u00F3sdagur", "fr\u00EDggjadagur", "leygardagur" };

  static final String[] shortWeekdays = { null, "sun", "m\u00E1n", "t\u00FDs", "mik", "h\u00F3s", "fr\u00ED", "ley" };

  static final String[] shortMonths = { "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des", null };

  static final String[] months = { "januar", "februar", "mars", "apr\u00EDl", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember", null };

  static final String[] ampms = { "", "" };

  static final String shortDateFormat = "dd/MM-yyyy";
  static final String defaultTimeFormat = "";
  static final String currencySymbol = LocaleInformation_da_DK.currencySymbol;
  static final String intlCurrencySymbol = LocaleInformation_da_DK.intlCurrencySymbol;
  static final String currencyFormat = LocaleInformation_da_DK.currencyFormat;

  private static final Object[][] contents =
  {
    { "weekdays", weekdays },
    { "shortWeekdays", shortWeekdays },
    { "shortMonths", shortMonths },
    { "months", months },
    { "ampms", ampms },
    { "shortDateFormat", shortDateFormat },
    { "defaultTimeFormat", defaultTimeFormat },
    { "currencySymbol", currencySymbol },
    { "intlCurrencySymbol", intlCurrencySymbol },
    { "currencyFormat", currencyFormat },
    { "decimalSeparator", decimalSeparator },
    { "groupingSeparator", groupingSeparator },
    { "numberFormat", numberFormat },
    { "percentFormat", percentFormat },
  };

  public Object[][] getContents () { return contents; }
}
