using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static BeetleX.Redis.Commands.HSCAN; using static IRaCIS.Core.Application.Service.Common.SystemMonitor; namespace IRaCIS.Core.Application.Helper { public static class InternationalizationHelper { public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources); public static async Task AddOrUpdateJsonKeyValueAsync(string key, string value) { if (!Directory.Exists(JsonFileFolder) || Directory.GetFiles(JsonFileFolder).Any(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase))) { throw new BusinessValidationFailedException("国际化Json文件目录有误"); } //将该目录下的国际化文件全部修改 foreach (var filePath in Directory.GetFiles(JsonFileFolder).Where(filePath => Path.GetExtension(filePath).Equals(".json", StringComparison.OrdinalIgnoreCase))) { var json = await File.ReadAllTextAsync(filePath); JObject jsonObject = JObject.Parse(json, new JsonLoadSettings() { CommentHandling = CommentHandling.Load }); // 添加或更新指定的键值对 jsonObject[key] = value; await File.WriteAllTextAsync(filePath, jsonObject.ToString()); } } public static async Task InitInternationlizationDataAndWatchJsonFileAsync(IRepository _repository) { //查询数据库的数据 var toJsonList = await _repository.Where(t => t.InternationalizationType == 1).Select(t => new { t.Code, t.Value, t.ValueCN }).ToListAsync(); //组织成json 文件 var usJsonPath = Path.Combine(JsonFileFolder, StaticData.En_US_Json); var cnJsonPath = Path.Combine(JsonFileFolder, StaticData.Zh_CN_Json); //本地静态文件国际化需要 foreach (var tojsonItem in toJsonList) { StaticData.En_US_Dic[tojsonItem.Code] = tojsonItem.Value; StaticData.Zh_CN_Dic[tojsonItem.Code] = tojsonItem.ValueCN; } File.WriteAllText(usJsonPath, JsonConvert.SerializeObject(StaticData.En_US_Dic)); File.WriteAllText(cnJsonPath, JsonConvert.SerializeObject(StaticData.Zh_CN_Dic)); //监测Json文件变更 实时刷新数据 WatchJsonFile(usJsonPath); WatchJsonFile(cnJsonPath); } public static void WatchJsonFile(string filePath) { FileSystemWatcher watcher = new FileSystemWatcher(Path.GetDirectoryName(filePath), Path.GetFileName(filePath)); watcher.Changed += (sender, e) => LoadJsonFile(filePath); watcher.EnableRaisingEvents = true; } private static void LoadJsonFile(string filePath) { IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile(filePath); 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; } } } } }