/// <summary>
        /// ASP.NET에서 현재 요청과 관련된 현재 상태(예: 세션 상태)를 가져오는 경우 발생하는 이벤트에 대한 핸들러입니다.<br/>
        /// 사용자의 Locale 정보를 읽어서 현재 Context의 CultureInfo를 설정합니다.
        /// </summary>
        public virtual void OnBeginRequest(object sender, EventArgs e)
        {
            CultureInfo culture = null;

            // 사용자가 지정한 Locale을 사용할 경우
            if (UseUserLocale)
            {
                try {
                    var cultureName = CookieTool.Get(UserLocaleCookieName);

                    // 쿠키에 User Locale 정보가 저장되어 있다면
                    if (cultureName.IsNotWhiteSpace())
                    {
                        culture = new CultureInfo(cultureName);

                        if (IsDebugEnabled)
                        {
                            log.Debug("쿠키로부터 User Locale 정보를 얻었습니다. User Locale=[{0}]", cultureName);
                        }
                    }
                    else if (HttpContext.Current.Request.UserLanguages != null)
                    {
                        var language = HttpContext.Current.Request.UserLanguages.FirstOrDefault();

                        if (language.IsNotWhiteSpace())
                        {
                            culture = new CultureInfo(language);
                            if (IsDebugEnabled)
                            {
                                log.Debug("사용자 Browser의 UserLanguage중에 첫번째 것을 User Locale로 사용합니다. language=[{0}", language);
                            }
                        }
                    }
                }
                catch (Exception ex) {
                    if (log.IsInfoEnabled)
                    {
                        log.Info("쿠키로부터 User Locale 정보를 수집하는데 실패했습니다. 무시하고 시스템 기준값을 사용합니다.");
                        log.Info(ex);
                    }
                }
            }

            // 사용자 culture를 지정하지 못했다면, 현재 시스템의 Thread Context의 Culture를 지정합니다.
            if (culture.IsNullCulture())
            {
                culture = CultureInfo.CurrentCulture;

                if (IsDebugEnabled)
                {
                    log.Debug("시스템 설정 기준의 Locale을 사용합니다. Culture=[{0}]", culture.Name);
                }
            }

            SetCurrentCulture(culture);
        }
Esempio n. 2
0
        ///<summary>
        /// 값을 읽어온다.
        ///</summary>
        ///<typeparam name="T">유형</typeparam>
        ///<param name="name">명</param>
        ///<param name="defaultValue">기본값</param>
        ///<returns>값</returns>
        public static T LoadValue <T>(string name, T defaultValue)
        {
            name.ShouldNotBeWhiteSpace("name");

            return(WebTool.IsWebContext ? CookieTool.Get(name, defaultValue) : Local.Data[name].AsValue(defaultValue));
        }