// System.Globalization.CultureInfo // // Miguel de Icaza (miguel@ximian.com) // // (C) Ximian, Inc. 2001 (http://www.ximian.com) using System.Threading; namespace System.Globalization { public class CultureInfo { static CultureInfo invariant_culture_info; bool is_read_only; int lcid; bool use_user_override; NumberFormatInfo number_format; DateTimeFormatInfo datetime_format; private static readonly string MSG_READONLY = "This instance is read only"; // // Returns the Invariant Culture Information ("iv") // static public CultureInfo InvariantCulture { get { if (invariant_culture_info != null) return invariant_culture_info; invariant_culture_info = new CultureInfo (0x07f, false); invariant_culture_info.is_read_only = true; return invariant_culture_info; } } // // Creates a CultureInfo for a specific ID // public static CultureInfo CreateSpecificCulture (string name) { switch (name){ case "iv": return InvariantCulture; default: throw new ArgumentException ("CreateSpecificCultureName"); } } /// /// CultureInfo instance that represents the culture used by the current thread /// public static CultureInfo CurrentCulture { get { return Thread.CurrentThread.CurrentCulture; } set { Thread.CurrentThread.CurrentCulture = value; } } /// /// CultureInfo instance that represents the current culture used by the ResourceManager to look up culture-specific resources at run time /// public static CultureInfo CurrentUICulture { get { return Thread.CurrentThread.CurrentUICulture; } set { Thread.CurrentThread.CurrentUICulture = value; } } public virtual int LCID { get { return lcid; } } // // Gets the string-encoded name of the culture // public virtual string Name { get { switch (lcid){ case 0x007f: return "iv"; } throw new Exception ("Miss constructed object for LCID: " + lcid); } } // // Returns whether the current culture is neutral (neutral cultures // only specify a language, not a country. // public virtual bool IsNeutralCulture { get { return (lcid & 0xff00) == 0; } } // // Returns the NumberFormat for the current lcid // public virtual NumberFormatInfo NumberFormat { get { if (number_format == null){ lock (this){ if (number_format == null) number_format = new NumberFormatInfo (lcid); } } return number_format; } set { if (is_read_only) throw new InvalidOperationException(MSG_READONLY); if (value == null) throw new ArgumentNullException ("NumberFormat"); number_format = value; } } public virtual DateTimeFormatInfo DateTimeFormat { get { if (datetime_format == null) { lock (this) { if (datetime_format == null) datetime_format = new DateTimeFormatInfo(); //FIXME: create correct localized DateTimeFormat } } return datetime_format; } set { if (is_read_only) throw new InvalidOperationException(MSG_READONLY); if (value == null) throw new ArgumentNullException ("DateTimeFormat"); datetime_format = value; } } public CultureInfo (int code, bool use_user_override) { switch (lcid){ case 0x007f: // iv Invariant case 0x0036: // af Afrikaans case 0x0436: // af-ZA Afrikaans - South Africa case 0x001c: // sq Albanian case 0x041c: // sq-AL Albanian - Albania case 0x0001: // ar Arabic case 0x1401: // ar-DZ Arabic - Algeria case 0x3c01: // ar-BH Arabic - Barhain case 0x0c01: // ar-EG Arabic - Egypt case 0x0801: // ar-IQ Arabic - Iraq case 0x2c01: // ar-JO Arabic - Jordan case 0x3401: // ar-KQ Arabic - Kuwait case 0x3001: // ar-LB Arabic - Lebanon case 0x1001: // ar-LY Arabic - Libya case 0x1801: // ar-MA Arabic - Morocco case 0x2001: // ar-OM Arabic - Oman case 0x4001: // ar-QA Arabic - Qatar case 0x0401: // ar-SA Arabic - Saudi Arabia case 0x2801: // ar-SY Arabic - Syria case 0x1c01: // ar-TN Arabic - Tunisia case 0x3801: // ar-AE Arabic - United Arab Emirates case 0x2401: // ar-YE Arabic - Yemen lcid = code; this.use_user_override = use_user_override; break; default: throw new ArgumentException ("CultureInfoCode"); } } } }