public Translator()
        {
            _categoryDictionary       = new SortedDictionary <string, ValueDictionaryHolder>();
            _twoLetterIsoLanguageName = Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;

            var storageDirectory  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, StorageDirectory);
            var languageDirectory = Path.Combine(storageDirectory, _twoLetterIsoLanguageName);

            if (!Directory.Exists(languageDirectory))
            {
                return;
            }

            var files = Directory.GetFiles(languageDirectory, "*.json", SearchOption.TopDirectoryOnly);

            foreach (var file in files)
            {
                var category = Path.GetFileNameWithoutExtension(file);

                category = category?.ToLower(CultureInfo.InvariantCulture) ??
                           throw new InvalidOperationException("null == category");

                var valueDictionary = ValueDictionaryHolder.LoadFormFile(file);
                _categoryDictionary.Add(category, valueDictionary);
            }
        }
        public string Translate(string category, string value)
        {
            if (null == category)
            {
                return(null);
            }

            if (null == value)
            {
                return(null);
            }

            category = category.ToLower();

            string translation;

            lock (Anchor)
            {
                if (!_categoryDictionary.TryGetValue(category, out var valueDictionaryHolder))
                {
                    valueDictionaryHolder = new ValueDictionaryHolder();
                    _categoryDictionary.Add(category, valueDictionaryHolder);
                }

                var valueDictionary = valueDictionaryHolder.Dictionary;

                if (!valueDictionary.ContainsKey(value))
                {
                    valueDictionary.Add(value, string.Empty);
                    valueDictionaryHolder.Changed = true;
                }

                translation = valueDictionary[value];
            }

            if (string.IsNullOrEmpty(translation))
            {
                return(value);
            }

            return(translation);
        }