Localization

    /// <summary>
    /// Localization dictionary.
    /// </summary>
    public class LocalizationDictionary {

        #region Text Dictionary
        private Dictionary<String, ICollection<Dictionary<string,object>>> _TextDictionary;

        /// <summary>
        /// Get localization text dictionary.
        /// </summary>
        public Dictionary<String, ICollection<Dictionary<string, object>>> TextDictionary {
            get {
                if (_TextDictionary == null)
                    throw new InvalidOperationException("Localization Dictionary was not initialized.");

                return _TextDictionary;
            }
        }
        #endregion

        #region Instance

        private static LocalizationDictionary _Instance;

        /// <summary>
        /// Get initialized flag.
        /// </summary>
        public static bool Initialized {
            get {
                return _Instance != null;
            }
        }

        private LocalizationDictionary() { }
        
        /// <summary>
        /// Get localization dictionary instance.
        /// </summary>
        public static LocalizationDictionary Instance {
            get {
                if (_Instance == null) {
                    throw new InvalidOperationException("Localization Dictionary was not initialized.");
                }
                return _Instance;
            }
        }

        public static void InitializeInstance() {
            _Instance = new LocalizationDictionary();
            _Instance.Initialize();
        }

        public static void InitializeInstance(Dictionary<string,ICollection<Dictionary<string,object>>> list) {
            _Instance = new LocalizationDictionary();
            _Instance.Initialize(list);
        }

        #endregion

        #region Initialize

        private void Initialize() {
            lock (_Instance) {
                _TextDictionary = new Dictionary<string, ICollection<Dictionary<string, object>>>();
                // Get Text Data from Service
                using (MesproContext db = MesproContext.CreateNew()) {
                    // Build Text Dictionary
                    IQueryable<vLocalizationText> query = db.vLocalizationTexts;

                    IList<vLocalizationText> dicList = query.ToList();
                    foreach (var data in dicList) {
                        var dic = new Dictionary<string, object>();
                        dic.Add("Language", data.LanguageCode);
                        dic.Add("Description", data.Description);

                        if (_TextDictionary.ContainsKey(data.LocalizationCode)) {
                            var locList = _TextDictionary[data.LocalizationCode];
                            locList.Add(dic);
                        } else {
                            var locList = new List<Dictionary<string, object>>();
                            locList.Add(dic);

                            _TextDictionary.Add(data.LocalizationCode, locList);
                        }
                    }
                }
            }
        }

        private void Initialize(Dictionary<string,ICollection<Dictionary<string,object>>> list) {
            lock (_Instance) {
                _TextDictionary = list;
            }
        }

        public string GetLanguage() {
            // Get language code from current thread
            string lngCode = CultureInfo.CurrentCulture.Name;

            // Set default language is en-US
            if (string.IsNullOrEmpty(lngCode))
                return "en-US";

            return lngCode;
        }

        #endregion

        #region Get Localization text

        /// <summary>
        /// Get localization text by code.
        /// </summary>
        /// <param name="localizationCode">Localization Code</param>
        /// <returns>Localized text</returns>
        public string GetLocalizationText(string localizationCode) {
            if (_TextDictionary == null)
                return null;

            if (_TextDictionary.ContainsKey(localizationCode)) {

                // Get language code
                var languageCode = GetLanguage();
                
                // Get Localization for all language
                ICollection<Dictionary<string,object>> locDic = (ICollection<Dictionary<string, object>>)_TextDictionary[localizationCode];

                // Get Localization for current language
                Dictionary<string, object> currDic = locDic.Where(h => (string)h["Language"] == languageCode).SingleOrDefault();
                if (currDic == null || !currDic.ContainsKey("Description"))
                    return "";

                return (string)currDic["Description"];
            }

            return null;
        }
        #endregion
    }
  /// <summary>
    /// Localization context.
    /// </summary>
    public class LocalizationContext {

        #region Get localization text

        /// <summary>
        /// Get localization text by property name.
        /// </summary>
        /// <param name="propertyName">Property name</param>
        /// <returns>Localized text</returns>
        public string GetLocalizationText(string propertyName) {
            if (!LocalizationDictionary.Initialized)
                return null;

            return LocalizationDictionary.Instance.GetLocalizationText(propertyName);
        }

        /// <summary>
        /// Get localization text by property expression.
        /// </summary>
        /// <typeparam name="T">Class</typeparam>
        /// <param name="propertyExpression">Property expression</param>
        /// <returns>Localized text</returns>
        public string GetLocalizationText<T>(Expression<Func<T>> propertyExpression) {
            return GetLocalizationText(PropertySupport.ExtractPropertyName(propertyExpression));
        }

        protected string IsNullOrEmpty(string targetString, string defaultString) {
            if (String.IsNullOrEmpty(targetString))
                return defaultString;

            return targetString;
        }

        #endregion

        #region Common Messages

        #region No Data Selected

        private const string NO_DATA_SELECTED = "No data selected.";

        /// <summary>
        /// No data selected.
        /// </summary>
        
        public string NoDataSelected {
            get {
                return IsNullOrEmpty(GetLocalizationText(() => NoDataSelected), NO_DATA_SELECTED);
            }
        }

        #endregion

        #endregion
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值