private bool MatchLanguageByCurrentCulture(InstallationLanguage language) { var curCulture = Thread.CurrentThread.CurrentUICulture; if (language.Code.EqualsNoCase(curCulture.IetfLanguageTag)) { return(true); } curCulture = curCulture.Parent; if (curCulture != null) { return(language.Code.EqualsNoCase(curCulture.IetfLanguageTag)); } return(false); }
public IList <InstallationLanguage> GetInstallationLanguages() { if (_installLanguages == null) { _installLanguages = new List <InstallationLanguage>(); foreach (var file in _appContext.AppDataRoot.EnumerateFiles("Localization/Installation", "*.xml")) { var filePath = file.PhysicalPath; var xmlDocument = new XmlDocument(); xmlDocument.Load(filePath); // Get language code var languageCode = string.Empty; // File name format: installation.{languagecode}.xml var r = new Regex(Regex.Escape("installation.") + "(.*?)" + Regex.Escape(".xml")); var matches = r.Matches(file.Name); foreach (Match match in matches) { languageCode = match.Groups[1].Value; } // Get language friendly name var languageName = xmlDocument.SelectSingleNode(@"//Language").Attributes["Name"].InnerText.Trim(); // Is default var isDefaultAttribute = xmlDocument.SelectSingleNode(@"//Language").Attributes["IsDefault"]; var isDefault = isDefaultAttribute != null && Convert.ToBoolean(isDefaultAttribute.InnerText.Trim()); // Is RTL var isRightToLeftAttribute = xmlDocument.SelectSingleNode(@"//Language").Attributes["IsRightToLeft"]; var isRightToLeft = isRightToLeftAttribute != null && Convert.ToBoolean(isRightToLeftAttribute.InnerText.Trim()); // Create language var language = new InstallationLanguage { Code = languageCode, Name = languageName, IsDefault = isDefault, IsRightToLeft = isRightToLeft }; // Load resources foreach (XmlNode resNode in xmlDocument.SelectNodes(@"//Language/LocaleResource")) { var resNameAttribute = resNode.Attributes["Name"]; var resValueNode = resNode.SelectSingleNode("Value"); if (resNameAttribute == null) { throw new SmartException("All installation resources must have an attribute Name=\"Value\"."); } var resourceName = resNameAttribute.Value.Trim(); if (string.IsNullOrEmpty(resourceName)) { throw new SmartException("All installation resource attributes 'Name' must have a value.'"); } if (resValueNode == null) { throw new SmartException("All installation resources must have an element \"Value\"."); } var resourceValue = resValueNode.InnerText.Trim(); language.Resources[resourceName] = new InstallationLocaleResource { Name = resourceName, Value = resourceValue }; } _installLanguages.Add(language); } _installLanguages = _installLanguages.OrderBy(x => x.Name).ToList(); } return(_installLanguages); }