OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / libjava / java / util / Locale.java
1 /* Copyright (C) 1998, 1999  Cygnus Solutions
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8
9 package java.util;
10
11 /**
12  * @author Per Bothner <bothner@cygnus.com>
13  * @date October 24, 1998.
14  */
15
16 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3,
17  * and "The Java Language Specification", ISBN 0-201-63451-1.
18  * Status:  None of the getDisplayXXX or getISO3XXX methods are implemented.
19  */
20 public final class Locale implements java.io.Serializable, Cloneable
21 {
22   // The fields are as specified in Sun's "Serialized Form"
23   // in the JDK 1.2 beta 4 API specification.
24   private String country;
25   private int hashcode;
26   private String language;
27   private String variant;
28   private static Locale defaultLocale;
29
30   // FIXME: many are still missing.
31   public static final Locale CANADA = new Locale ("en", "CA");
32   public static final Locale FRANCE = new Locale ("fr", "FR");
33   public static final Locale JAPAN = new Locale ("ja", "JP");
34   public static final Locale UK = new Locale ("en", "GB");
35   public static final Locale US = new Locale ("en", "US");
36
37   public Locale (String languageCode, String countryCode)
38   {
39     language = languageCode.toLowerCase();
40     country = countryCode.toUpperCase();
41     hashcode = languageCode.hashCode() ^ countryCode.hashCode();
42   }
43
44   public Locale (String languageCode, String countryCode,
45                  String variantCode)
46   {
47     this (languageCode, countryCode);
48     variant = variantCode;
49     hashcode ^= variantCode.hashCode();
50   }
51
52   public Object clone ()
53     {
54       return (Object) new Locale (language, country, variant);
55     }
56
57   public boolean equals (Object obj)
58     {
59       if (! (obj instanceof Locale))
60         return false;
61       Locale loc = (Locale) obj;
62       if ((language == null && loc.language != null)
63           || (country == null && loc.country != null)
64           || (variant == null && loc.variant != null))
65         return false;
66       return (language.equals(loc.language)
67               && country.equals(loc.country)
68               && variant.equals(loc.variant));
69     }
70
71   public String getCountry ()
72   {
73     return country;
74   }
75
76   public String getLanguage ()
77   {
78     return language;
79   }
80
81   public String getVariant ()
82   {
83     return variant;
84   }
85
86   public int hashCode ()
87   {
88     return hashcode;
89   }
90
91   private static synchronized Locale setDefault()
92   {
93     if (defaultLocale != null)
94       return defaultLocale;
95     String language = System.getProperty("user.language");
96     String country = System.getProperty("user.region");
97     defaultLocale = new Locale (language == null ? "en" : language,
98                                 country == null ? "" : country);
99     return defaultLocale;
100   }
101
102   public static Locale getDefault ()
103   {
104     return defaultLocale == null ? setDefault() : defaultLocale;
105   }
106
107   public static void setDefault (Locale newLocale)
108   {
109     defaultLocale = newLocale;
110   }
111
112   public String toString ()
113   {
114     StringBuffer result = new StringBuffer(20);
115     result.append(language);
116     result.append('_');
117     result.append(country);
118     if (variant != null && variant.length() > 0)
119       {
120         result.append('_');
121         result.append(variant);
122       }
123     return result.toString();
124   }
125 }