private LanguageCultureCollection GetLanguagesCultureList(string keyValueList) { //Trim last separator if found keyValueList = keyValueList.TrimEnd(itemsSeparator); string[] nameValues = keyValueList.Split(itemsSeparator); LanguageCultureCollection nameValueColl = new LanguageCultureCollection(); foreach (string nameValue in nameValues) { if (nameValue != string.Empty) { string[] arrNameValue = nameValue.Split(keyValueSeparator); CultureInfo language; CultureInfo culture; language = new CultureInfo(arrNameValue[0]); if (arrNameValue.Length == 2) { culture = new CultureInfo(arrNameValue[1]); nameValueColl.Add(new LanguageCultureItem(language, culture)); } if (arrNameValue.Length == 1) { culture = new CultureInfo(arrNameValue[0]); if (culture.IsNeutralCulture) //we cannot allow this culture = CultureInfo.CreateSpecificCulture(culture.Name); //creates a specific culture nameValueColl.Add(new LanguageCultureItem(language, culture)); } } } return nameValueColl; }
/// <summary> /// Get current Language from User language list /// </summary> /// <param name="myLanguagesCultureList">My languages culture list.</param> /// <returns></returns> private static LanguageCultureItem InternalGetUserLanguages(LanguageCultureCollection myLanguagesCultureList) { // Get userLangs if (HttpContext.Current != null && HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length > 0) { var arrUserLangs = new ArrayList(HttpContext.Current.Request.UserLanguages); if (arrUserLangs.Count > 0) { for (var i = 0; i <= arrUserLangs.Count - 1; i++) { string currentLanguage; if (arrUserLangs[i].ToString().IndexOf(';') >= 0) { currentLanguage = arrUserLangs[i].ToString().Substring( 0, arrUserLangs[i].ToString().IndexOf(';')); } else { currentLanguage = arrUserLangs[i].ToString(); } try { // We try the full one... if this fails we catch it arrUserLangs[i] = new CultureInfo(currentLanguage); } catch (ArgumentException) { try { // Some browsers can send an invalid language // we try to get first two letters.. this is usually valid arrUserLangs[i] = new CultureInfo(currentLanguage.Substring(2)); } catch (ArgumentException) { } return null; } } } var userLangs = (CultureInfo[])arrUserLangs.ToArray(typeof(CultureInfo)); // Try to match browser "accept languages" list return myLanguagesCultureList.GetBestMatching(userLangs); } return null; }
/// <summary> /// Get default /// </summary> /// <param name="myLanguagesCultureList">My languages culture list.</param> /// <returns></returns> private static LanguageCultureItem InternalGetDefault(LanguageCultureCollection myLanguagesCultureList) { return myLanguagesCultureList[0]; }
/// <summary> /// Get current Language from Query string /// </summary> /// <param name="myLanguagesCultureList">My languages culture list.</param> /// <returns></returns> private static LanguageCultureItem InternalGetQuerystring(LanguageCultureCollection myLanguagesCultureList) { if (HttpContext.Current != null && HttpContext.Current.Request.Params["Lang"] != null && HttpContext.Current.Request.Params["Lang"].Length > 0) { try { return myLanguagesCultureList.GetBestMatching( new CultureInfo(HttpContext.Current.Request.Params["Lang"])); } catch (ArgumentException) { // Maybe an invalid CultureInfo return null; } } return null; }
/// <summary> /// Get current Language from Cookie /// </summary> /// <param name="myLanguagesCultureList">My languages culture list.</param> /// <param name="cookieAlias">The cookie alias.</param> /// <returns></returns> private static LanguageCultureItem InternalGetCookie( LanguageCultureCollection myLanguagesCultureList, string cookieAlias) { if (HttpContext.Current != null && cookieAlias != null && HttpContext.Current.Request.Cookies[SwitcherCookiePrefix + cookieAlias] != null && HttpContext.Current.Request.Cookies[SwitcherCookiePrefix + cookieAlias].Value.Length > 0) { try { return myLanguagesCultureList.GetBestMatching( new CultureInfo( HttpContext.Current.Request.Cookies[SwitcherCookiePrefix + cookieAlias].Value)); } catch (ArgumentException) { // Maybe an invalid CultureInfo } } return null; }