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;
        }