예제 #1
0
        /// <summary>
        /// 输出语言包;
        /// </summary>
        public void Serialize(Stream stream, LanguagePackDescription description, LanguageSplitDictionary dictionary)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }
            if (dictionary == null)
            {
                throw new ArgumentNullException(nameof(dictionary));
            }

            using (ZipOutputStream zipOutputStream = new ZipOutputStream(stream))
            {
                zipOutputStream.IsStreamOwner = false;

                ZipEntry descZipEntry = new ZipEntry(descriptionFileName);
                zipOutputStream.PutNextEntry(descZipEntry);
                descriptionSerializer.Value.Serialize(zipOutputStream, description);

                SplitLanguageCollection collection = Split(dictionary);

                foreach (var value in collection.List)
                {
                    string name         = value.Key + dictionaryFileExtension;
                    var    keyValueList = value.Value;

                    ZipEntry dictionaryZipEntry = new ZipEntry(name);
                    zipOutputStream.PutNextEntry(dictionaryZipEntry);
                    languageListSerializer.Value.Serialize(zipOutputStream, keyValueList);
                }
            }
        }
예제 #2
0
        public SplitLanguageCollection Split(LanguageSplitDictionary dictionary)
        {
            SplitLanguageCollection collection = new SplitLanguageCollection();

            foreach (var item in dictionary.Dictionary)
            {
                LanguageSplitDictionary.LanguageValue languageValue = item.Value;
                collection.Add(languageValue.Tag, item.Key, languageValue.Value);
            }

            return(collection);
        }
예제 #3
0
        /// <summary>
        /// 反序列语言包内容;
        /// </summary>
        public LanguagePackDescription Deserialize(Stream stream, out LanguageSplitDictionary dictionary)
        {
            LanguagePackDescription?description = null;

            dictionary = null;

            using (ZipInputStream zipInputStream = new ZipInputStream(stream))
            {
                zipInputStream.IsStreamOwner = false;

                ZipEntry entry;
                while ((entry = zipInputStream.GetNextEntry()) != null)
                {
                    if (entry.IsFile)
                    {
                        if (!description.HasValue && entry.Name == descriptionFileName)
                        {
                            description = descriptionSerializer.Value.Deserialize(zipInputStream);
                        }
                        else if (entry.Name.EndsWith(dictionaryFileExtension))
                        {
                            var value = languageListSerializer.Value.Deserialize(zipInputStream);

                            if (dictionary == null)
                            {
                                dictionary = new LanguageSplitDictionary();
                            }

                            string tag = Path.GetFileNameWithoutExtension(entry.Name);
                            dictionary.Add(tag, value);
                        }
                    }
                }
            }

            if (description.HasValue)
            {
                return(description.Value);
            }
            else
            {
                throw new InvalidOperationException();
            }
        }