/* Copyright (C) 1998, 1999 Cygnus Solutions This file is part of libgcj. This software is copyrighted work licensed under the terms of the Libgcj License. Please consult the file "LIBGCJ_LICENSE" for details. */ package java.util; /** * @author Per Bothner * @date October 24, 1998. */ /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3, * and "The Java Language Specification", ISBN 0-201-63451-1. * Status: None of the getDisplayXXX or getISO3XXX methods are implemented. */ public final class Locale implements java.io.Serializable, Cloneable { // The fields are as specified in Sun's "Serialized Form" // in the JDK 1.2 beta 4 API specification. private String country; private int hashcode; private String language; private String variant; private static Locale defaultLocale; // FIXME: many are still missing. public static final Locale CANADA = new Locale ("en", "CA"); public static final Locale FRANCE = new Locale ("fr", "FR"); public static final Locale JAPAN = new Locale ("ja", "JP"); public static final Locale UK = new Locale ("en", "GB"); public static final Locale US = new Locale ("en", "US"); public Locale (String languageCode, String countryCode) { this (languageCode, countryCode, ""); } public Locale (String languageCode, String countryCode, String variantCode) { // We must explicitly check the arguments. if (languageCode == null || countryCode == null || variantCode == null) throw new NullPointerException (); language = languageCode.toLowerCase(); country = countryCode.toUpperCase(); variant = variantCode.toUpperCase(); hashcode = (languageCode.hashCode() ^ countryCode.hashCode() ^ variantCode.hashCode()); } public Object clone () { return (Object) new Locale (language, country, variant); } public boolean equals (Object obj) { if (! (obj instanceof Locale)) return false; Locale loc = (Locale) obj; return (language.equals(loc.language) && country.equals(loc.country) && variant.equals(loc.variant)); } public String getCountry () { return country; } public String getLanguage () { return language; } public String getVariant () { return variant; } public int hashCode () { return hashcode; } private static synchronized Locale setDefault() { if (defaultLocale != null) return defaultLocale; String language = System.getProperty("user.language"); String country = System.getProperty("user.region"); defaultLocale = new Locale (language == null ? "en" : language, country == null ? "" : country); return defaultLocale; } public static Locale getDefault () { return defaultLocale == null ? setDefault() : defaultLocale; } public static void setDefault (Locale newLocale) { defaultLocale = newLocale; } public String toString () { StringBuffer result = new StringBuffer(20); result.append(language); result.append('_'); result.append(country); if (variant.length() > 0) { result.append('_'); result.append(variant); } return result.toString(); } }