using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SharpCompress.Common; namespace IRaCIS.Core.Application.Helper; public class IRCGlobalInfoDTO { public string Code { get; set; } public string Value { get; set; } public string ValueCN { get; set; } public string Description { get; set; } } public static class InternationalizationHelper { public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources); public static string USJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json); public static string CNJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json); static InternationalizationHelper() { if (!Directory.Exists(JsonFileFolder) || !Directory.GetFiles(JsonFileFolder).Any(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase)) || !File.Exists(USJsonPath) || !File.Exists(CNJsonPath)) { throw new BusinessValidationFailedException(I18n.T("IRaCISCHangfireJob_FileNotFound")); } } public static async Task BatchAddJsonKeyValueAsync(List list) { await StoreInfoToFileAsync(list); } public static async Task AddOrUpdateJsonKeyValueAsync(IRCGlobalInfoDTO info) { var list = new List() { info }; await StoreInfoToFileAsync(list); } public static async Task StoreInfoToFileAsync(List list) { foreach (var filePath in new string[] { USJsonPath, CNJsonPath }) { var json = await File.ReadAllTextAsync(filePath); JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load }); if (filePath.Contains(StaticData.En_US_Json)) { foreach (var tojsonItem in list) { jsonObject[tojsonItem.Code] = tojsonItem.Value; //日志记录该信息方便自己人看, 返回给客户的是配置的 StaticData.Localizer_Dev_Dic[tojsonItem.Code] = tojsonItem.Description; } } else { foreach (var tojsonItem in list) { jsonObject[tojsonItem.Code] = tojsonItem.ValueCN; } } await File.WriteAllTextAsync(filePath, jsonObject.ToString()); } } #region 监测Json文件变更 实时刷新数据 废弃 //FileSystemWatcher_US = new FileSystemWatcher //{ // Path = Path.GetDirectoryName(USJsonPath)!, // NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size, // Filter = Path.GetFileName(USJsonPath), // EnableRaisingEvents = true, //}; //// 添加文件更改事件的处理程序 //FileSystemWatcher_US.Changed += (sender, e) => LoadJsonFile(StaticData.Folder.Resources + "\\" + StaticData.En_US_Json); //FileSystemWatcher_CN = new FileSystemWatcher //{ // Path = Path.GetDirectoryName(CNJsonPath)!, // NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size, // Filter = Path.GetFileName(CNJsonPath), // EnableRaisingEvents = true, //}; //FileSystemWatcher_CN.Changed += (sender, e) => LoadJsonFile(StaticData.Folder.Resources + "\\" + StaticData.Zh_CN_Json); //private static void LoadJsonFile(string filePath) //{ // Console.WriteLine("刷新json内存数据"); // IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(filePath, false, false); // IConfigurationRoot enConfiguration = builder.Build(); // foreach (IConfigurationSection section in enConfiguration.GetChildren()) // { // if (filePath.Contains(StaticData.En_US_Json)) // { // StaticData.En_US_Dic[section.Key] = section.Value; // } // else // { // StaticData.Zh_CN_Dic[section.Key] = section.Value; // } // } //} #endregion }