// This file was automatically generated by localedef.

package gnu.java.locale;

import java.util.ListResourceBundle;

public class LocaleInformation_vi_VN extends ListResourceBundle
{
  static final String decimalSeparator = ",";
  static final String groupingSeparator = ".";
  static final String numberFormat = "#,##0.###";
  static final String percentFormat = "#,##0%";
  static final String[] weekdays = { null, "Th\u01B0\u0301 hai ", "Th\u01B0\u0301 ba ", "Th\u01B0\u0301 t\u01B0 ", "Th\u01B0\u0301 n\u0103m ", "Th\u01B0\u0301 s\u00E1u ", "Th\u01B0\u0301 ba\u0309y ", "Chu\u0309 nh\u00E2\u0323t " };

  static final String[] shortWeekdays = { null, "Th 2 ", "Th 3 ", "Th 4 ", "Th 5 ", "Th 6 ", "Th 7 ", "CN " };

  static final String[] shortMonths = { "Thg 1", "Thg 2", "Thg 3", "Thg 4", "Thg 5", "Thg 6", "Thg 7", "Thg 8", "Thg 9", "Thg 10", "Thg 11", "Thg 12", null };

  static final String[] months = { "Th\u00E1ng m\u00F4\u0323t", "Th\u00E1ng hai", "Th\u00E1ng ba", "Th\u00E1ng t\u01B0", "Th\u00E1ng n\u0103m", "Th\u00E1ng s\u00E1u", "Th\u00E1ng ba\u0309y", "Th\u00E1ng t\u00E1m", "Th\u00E1ng ch\u00EDn", "Th\u00E1ng m\u01B0\u01A1\u0300i", "Th\u00E1ng m\u01B0\u01A1\u0300i m\u00F4\u0323t", "Th\u00E1ng m\u01B0\u01A1\u0300i hai", null };

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

  static final String shortDateFormat = "EEEE dd MMM yyyy";
  static final String defaultTimeFormat = "";
  static final String currencySymbol = "\u20AB";
  static final String intlCurrencySymbol = "VND";
  static final String currencyFormat = "#,##0.0000$;-$#,##0.0000";

  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; }
}
