1 // System.Globalization.CultureInfo
3 // Miguel de Icaza (miguel@ximian.com)
5 // (C) Ximian, Inc. 2001 (http://www.ximian.com)
7 using System.Threading;
9 namespace System.Globalization
11 public class CultureInfo
13 static CultureInfo invariant_culture_info;
16 bool use_user_override;
17 NumberFormatInfo number_format;
18 DateTimeFormatInfo datetime_format;
20 private static readonly string MSG_READONLY = "This instance is read only";
23 // Returns the Invariant Culture Information ("iv")
25 static public CultureInfo InvariantCulture {
27 if (invariant_culture_info != null)
28 return invariant_culture_info;
30 invariant_culture_info = new CultureInfo (0x07f, false);
31 invariant_culture_info.is_read_only = true;
33 return invariant_culture_info;
38 // Creates a CultureInfo for a specific ID
40 public static CultureInfo CreateSpecificCulture (string name)
44 return InvariantCulture;
47 throw new ArgumentException ("CreateSpecificCultureName");
52 /// CultureInfo instance that represents the culture used by the current thread
54 public static CultureInfo CurrentCulture
58 return Thread.CurrentThread.CurrentCulture;
63 Thread.CurrentThread.CurrentCulture = value;
68 /// CultureInfo instance that represents the current culture used by the ResourceManager to look up culture-specific resources at run time
70 public static CultureInfo CurrentUICulture
74 return Thread.CurrentThread.CurrentUICulture;
79 Thread.CurrentThread.CurrentUICulture = value;
84 public virtual int LCID {
91 // Gets the string-encoded name of the culture
93 public virtual string Name {
99 throw new Exception ("Miss constructed object for LCID: " + lcid);
104 // Returns whether the current culture is neutral (neutral cultures
105 // only specify a language, not a country.
107 public virtual bool IsNeutralCulture {
109 return (lcid & 0xff00) == 0;
113 // Returns the NumberFormat for the current lcid
115 public virtual NumberFormatInfo NumberFormat {
117 if (number_format == null){
119 if (number_format == null)
120 number_format = new NumberFormatInfo (lcid);
124 return number_format;
128 if (is_read_only) throw new InvalidOperationException(MSG_READONLY);
131 throw new ArgumentNullException ("NumberFormat");
133 number_format = value;
137 public virtual DateTimeFormatInfo DateTimeFormat
141 if (datetime_format == null)
145 if (datetime_format == null)
146 datetime_format = new DateTimeFormatInfo(); //FIXME: create correct localized DateTimeFormat
150 return datetime_format;
155 if (is_read_only) throw new InvalidOperationException(MSG_READONLY);
158 throw new ArgumentNullException ("DateTimeFormat");
160 datetime_format = value;
165 public CultureInfo (int code, bool use_user_override)
168 case 0x007f: // iv Invariant
169 case 0x0036: // af Afrikaans
170 case 0x0436: // af-ZA Afrikaans - South Africa
171 case 0x001c: // sq Albanian
172 case 0x041c: // sq-AL Albanian - Albania
173 case 0x0001: // ar Arabic
174 case 0x1401: // ar-DZ Arabic - Algeria
175 case 0x3c01: // ar-BH Arabic - Barhain
176 case 0x0c01: // ar-EG Arabic - Egypt
177 case 0x0801: // ar-IQ Arabic - Iraq
178 case 0x2c01: // ar-JO Arabic - Jordan
179 case 0x3401: // ar-KQ Arabic - Kuwait
180 case 0x3001: // ar-LB Arabic - Lebanon
181 case 0x1001: // ar-LY Arabic - Libya
182 case 0x1801: // ar-MA Arabic - Morocco
183 case 0x2001: // ar-OM Arabic - Oman
184 case 0x4001: // ar-QA Arabic - Qatar
185 case 0x0401: // ar-SA Arabic - Saudi Arabia
186 case 0x2801: // ar-SY Arabic - Syria
187 case 0x1c01: // ar-TN Arabic - Tunisia
188 case 0x3801: // ar-AE Arabic - United Arab Emirates
189 case 0x2401: // ar-YE Arabic - Yemen
191 this.use_user_override = use_user_override;
195 throw new ArgumentException ("CultureInfoCode");