コード例 #1
0
        /// <summary>
        /// 搜索模组语言资源,加载合适的语言资源,加载合适的模组语言资源;
        /// </summary>
        void IModificationInitializeHandle.Initialize(IReadOnlyList <Modification> mods, CancellationToken token)
        {
            LocalizationConfigSerializer configSerializer = new LocalizationConfigSerializer();
            LanguagePackSerializer       packSerializer   = new LanguagePackSerializer();

            //读取语言配置
            LocalizationConfig?config = TrySerializeConfig(configSerializer);

            //搜索主语言包
            LanguagePacks = SearchLanguagePack(packSerializer, mods);

            //读取合适的主语言包
            LanguagePack languagePack = null;

            foreach (LanguagePackInfo info in EnumerateLanguagePask(config, LanguagePacks))
            {
                if (TryDeserializePack(packSerializer, info, out languagePack))
                {
                    break;
                }
            }

            if (languagePack == null)
            {
                throw new FileNotFoundException("未找到合适的语言包!");
            }


            //搜索读取语言补充包
            foreach (var mod in mods)
            {
                LanguagePackInfo supplementaryPackInfo = FindSupplementaryPack(packSerializer, mod, languagePack.Description);
                if (supplementaryPackInfo != null)
                {
                    LanguagePack supplementaryPack;
                    if (TryDeserializePack(packSerializer, supplementaryPackInfo, out supplementaryPack))
                    {
                        AddTo(languagePack, supplementaryPack);
                    }
                }
            }


            //若未成功读取语言配置,则输出;
            if (!config.HasValue)
            {
                DeserializeConfig(configSerializer, languagePack.Description);
            }

            Localization.LanguagePack = languagePack;
            Localization.NotifyLanguageChanged();
            UnityDebugHelper.SuccessfulReport(InitializerName, () => GetInfoLog());
        }
コード例 #2
0
 private LocalizationConfig?TrySerializeConfig(LocalizationConfigSerializer configSerializer)
 {
     try
     {
         LocalizationConfig?config = configSerializer.Deserialize(Resource.ConfigContent);
         return(config);
     }
     catch (Exception ex)
     {
         Debug.LogWarning("读取语言配置失败:" + ex);
         return(null);
     }
 }
コード例 #3
0
        private void DeserializeConfig(LocalizationConfigSerializer configSerializer, LanguagePackDescription description)
        {
            try
            {
                LocalizationConfig config = new LocalizationConfig()
                {
                    Name     = description.Name,
                    Language = description.Language,
                };

                using (Resource.ConfigContent.BeginUpdateAuto())
                {
                    configSerializer.Serialize(Resource.ConfigContent, config);
                }
            }
            catch (Exception ex)
            {
                Debug.LogWarning("输出语言配置失败:" + ex);
            }
        }