public static AppLanguage Load(string resourceKey, Stream stream)
        {
            stream.Seek(0, SeekOrigin.Begin);

            var languageObject = App.Serializer.Deserialize <JObject>(stream);

            if (languageObject == null)
            {
                throw new InvalidDataException("Null language object.");
            }

            JToken?entries = languageObject[nameof(entries)];

            if (entries == null)
            {
                throw new InvalidDataException("Missing entries.");
            }

            var entryList = new EntryList(nameof(entries));

            var language = new AppLanguage(
                languageObject["englishName"]?.ToObject <string>() ?? "",
                languageObject["localName"]?.ToObject <string>() ?? "",
                entryList);

            PopulateEntryList(entries, entryList);

            language.SetKeys(resourceKey);
            return(language);
        }
Пример #2
0
        public AppLanguage GetLanguage()
        {
            if (_languageRef.TryGetTarget(out var language))
            {
                return(language);
            }

            language = AppLanguage.Load(Key, Stream);
            _languageRef.SetTarget(language);
            return(language);
        }
Пример #3
0
        public Task RefreshLanguages()
        {
            return(Task.Run(() =>
            {
                var languages = AppLanguage.GetEmbeddedLanguages(Application.ResourceAssembly);
                var languageList = languages.ToList();

                //int index = 0;
                //Color itemColor = index++ % 2 == 0
                //    ? Colors.Transparent
                //    : Color.FromArgb(25, 127, 127, 127);

                foreach (var pair in languageList)
                {
                    var entry = new AppLanguageEntry(pair.Key, pair.Value);
                    entry.GetLanguage(); // preload here in task
                    _languageEntryList.Add(entry);
                }

                _languageEntryList.Sort((x, y) => x.Key.CompareTo(y.Key));
                Dispatcher.Invoke(_languageEntryViewList.ResetBindings);
            }));
        }