encodingHash = new Hashtable ();
}
- [MonoTODO]
- protected override void PostDeserialize ()
- {
- base.PostDeserialize();
- }
-
- protected override void PreSerialize (XmlWriter writer)
+ void VerifyData ()
{
- base.PreSerialize(writer);
-
- /* verify our data */
- CultureInfo culture;
-
+ bool fake = false;
try {
- culture = new CultureInfo.GetCultureInfo (Culture);
+ GetSanitizedCulture (Culture, ref fake);
}
catch {
throw new ConfigurationErrorsException ("the <globalization> tag contains an invalid value for the 'culture' attribute");
}
try {
- culture = new CultureInfo.GetCultureInfo (UICulture);
+ GetSanitizedCulture (UICulture, ref fake);
}
catch {
throw new ConfigurationErrorsException ("the <globalization> tag contains an invalid value for the 'uiCulture' attribute");
}
}
+ protected override void PostDeserialize ()
+ {
+ base.PostDeserialize();
+
+ VerifyData ();
+ }
+
+ protected override void PreSerialize (XmlWriter writer)
+ {
+ base.PreSerialize(writer);
+
+ VerifyData ();
+ }
+
[ConfigurationProperty ("culture", DefaultValue = "")]
public string Culture {
get { return (string) base [cultureProp];}
static bool encoding_warning;
static bool culture_warning;
+ bool autoCulture;
+ bool autoUICulture;
+
+ internal bool IsAutoCulture {
+ get { return autoCulture; }
+ }
+
+ internal bool IsAutoUICulture {
+ get { return autoUICulture; }
+ }
+
+ CultureInfo GetSanitizedCulture (string culture, ref bool auto)
+ {
+ auto = false;
+ if (culture == null)
+ throw new ArgumentNullException ("culture");
+ if (culture.Length <= 3)
+ return new CultureInfo (culture);
+ if (culture.StartsWith ("auto")) {
+ auto = true;
+ if (culture.Length > 5 && culture[4] == ':')
+ return new CultureInfo (culture.Substring (5));
+ return CultureInfo.InvariantCulture;// (0x007f);
+ }
+
+ return new CultureInfo (culture);
+ }
+
internal CultureInfo GetUICulture ()
{
if (cached_uiculture != UICulture) {
try {
- cached_uicultureinfo = new CultureInfo (UICulture);
+ cached_uicultureinfo = GetSanitizedCulture (UICulture, ref autoUICulture);
} catch {
CultureFailed ("UICulture", UICulture);
cached_uicultureinfo = new CultureInfo (0x007f); // Invariant
{
if (cached_culture != Culture) {
try {
- cached_cultureinfo = new CultureInfo (Culture);
+ cached_cultureinfo = GetSanitizedCulture (Culture, ref autoCulture);
} catch {
CultureFailed ("Culture", Culture);
cached_cultureinfo = new CultureInfo (0x007f); // Invariant
Encoding GetEncoding (ConfigurationProperty prop, ref string cached_encoding_name)
{
+ string enc = (string) base [prop];
if (cached_encoding_name == null)
- cached_encoding_name = "utf-8";
+ cached_encoding_name = ((enc == null) ? "utf-8" : enc);
Encoding encoding = (Encoding)encodingHash [prop];
if (encoding == null || encoding.EncodingName != cached_encoding_name) {
try {
- switch (cached_encoding_name.ToLower ()) {
+ switch (cached_encoding_name.ToLower (CultureInfo.InvariantCulture)) {
case "utf-16le":
case "utf-16":
case "ucs-2":
case "unicode-2-0-utf-8":
case "x-unicode-1-1-utf-8":
case "x-unicode-2-0-utf-8":
- encoding = new UTF8Encoding (false, false);
+ encoding = Encoding.UTF8;
break;
default:
encoding = Encoding.GetEncoding (cached_encoding_name);