
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_Locale__
#define __java_util_Locale__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>


class java::util::Locale : public ::java::lang::Object
{

  static ::java::util::Locale * getLocale(::java::lang::String *);
  static ::java::util::Locale * getLocale(::java::lang::String *, ::java::lang::String *);
  static ::java::util::Locale * getLocale(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  ::java::lang::String * convertLanguage(::java::lang::String *);
public:
  Locale(::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  Locale(::java::lang::String *, ::java::lang::String *);
  Locale(::java::lang::String *);
  static ::java::util::Locale * getDefault();
  static void setDefault(::java::util::Locale *);
  static JArray< ::java::util::Locale * > * getAvailableLocales();
  static JArray< ::java::lang::String * > * getISOCountries();
  static JArray< ::java::lang::String * > * getISOLanguages();
private:
  static JArray< ::java::lang::String * > * getISOStrings(::java::lang::String *);
public:
  ::java::lang::String * getLanguage();
  ::java::lang::String * getCountry();
  ::java::lang::String * getVariant();
  ::java::lang::String * toString();
  ::java::lang::String * getISO3Language();
  ::java::lang::String * getISO3Country();
  ::java::lang::String * getDisplayLanguage();
  ::java::lang::String * getDisplayLanguage(::java::util::Locale *);
  ::java::lang::String * getDisplayCountry();
  ::java::lang::String * getDisplayCountry(::java::util::Locale *);
  ::java::lang::String * getDisplayVariant();
  ::java::lang::String * getDisplayVariant(::java::util::Locale *);
  ::java::lang::String * getDisplayName();
  ::java::lang::String * getDisplayName(::java::util::Locale *);
  ::java::lang::Object * clone();
  jint hashCode();
  jboolean equals(::java::lang::Object *);
private:
  void writeObject(::java::io::ObjectOutputStream *);
  void readObject(::java::io::ObjectInputStream *);
public:
  static ::java::util::Locale * ENGLISH;
  static ::java::util::Locale * FRENCH;
  static ::java::util::Locale * GERMAN;
  static ::java::util::Locale * ITALIAN;
  static ::java::util::Locale * JAPANESE;
  static ::java::util::Locale * KOREAN;
  static ::java::util::Locale * CHINESE;
  static ::java::util::Locale * SIMPLIFIED_CHINESE;
  static ::java::util::Locale * TRADITIONAL_CHINESE;
  static ::java::util::Locale * FRANCE;
  static ::java::util::Locale * GERMANY;
  static ::java::util::Locale * ITALY;
  static ::java::util::Locale * JAPAN;
  static ::java::util::Locale * KOREA;
  static ::java::util::Locale * CHINA;
  static ::java::util::Locale * PRC;
  static ::java::util::Locale * TAIWAN;
  static ::java::util::Locale * UK;
  static ::java::util::Locale * US;
  static ::java::util::Locale * CANADA;
  static ::java::util::Locale * CANADA_FRENCH;
  static ::java::util::Locale * ROOT;
private:
  static const jlong serialVersionUID = 9149081749638150636LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) language;
  ::java::lang::String * country;
  ::java::lang::String * variant;
  jint hashcode;
  static JArray< ::java::util::Locale * > * availableLocales;
  static ::java::util::HashMap * localeMap;
  static ::java::util::Locale * defaultLocale;
  static JArray< ::java::lang::String * > * languageCache;
  static JArray< ::java::lang::String * > * countryCache;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Locale__
