后端国际化支持,日志记录的信息和返回前端的国际化不一致

This commit is contained in:
2024-08-14 14:43:48 +08:00
parent ffa6d62d3d
commit ab34c947ca
13 changed files with 92 additions and 111 deletions
@@ -11,6 +11,8 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.6" />
<PackageReference Include="SharpCompress" Version="0.37.2" />
@@ -1,4 +1,5 @@
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.Extensions.Localization;
using System;
namespace IRaCIS.Core.Infrastructure
@@ -8,15 +9,24 @@ namespace IRaCIS.Core.Infrastructure
public ApiResponseCodeEnum Code { get; set; }
public BusinessValidationFailedException()
public string LocalizedKey { get; set; }=string.Empty;
public BusinessValidationFailedException()
{
}
public BusinessValidationFailedException(LocalizedString message, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed) : base(message)
{
Code = code;
LocalizedKey=message.Name;
}
public BusinessValidationFailedException(string message, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed) : base(message)
{
Code = code;
Code = code;
}
}
}
}
@@ -16,6 +16,9 @@
/// 消息
/// </summary>
string ErrorMessage { get; }
public string LocalizedInfo { get; set; }
}
/// <summary>
@@ -30,13 +33,4 @@
T Data { get; set; }
}
//public interface IResponseOutput<T,T2> : IResponseOutput
//{
// /// <summary>
// /// 返回数据
// /// </summary>
// T Data { get; }
// T2 OtherInfo { get; }
//}
}
@@ -1,4 +1,7 @@
using Newtonsoft.Json;
using IRaCIS.Core.Domain.Share;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace IRaCIS.Core.Infrastructure.Extention
{
@@ -7,10 +10,10 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// </summary>
public class ResponseOutput<T> : IResponseOutput<T>
{
/// <summary>
/// 是否成功标记
/// </summary>
public bool IsSuccess { get; private set; }
/// <summary>
/// 是否成功标记
/// </summary>
public bool IsSuccess { get; private set; }
public ApiResponseCodeEnum Code { get; set; } = ApiResponseCodeEnum.OK;
@@ -25,34 +28,20 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// 数据 兼顾以前 Json序列化的时候返回属性名为“Result”
/// </summary>
[JsonProperty("Result")]
public T Data { get; set; }
public T Data { get; set; }
[JsonProperty("OtherInfo")]
public object OtherData { get; set; }
public string LocalizedInfo { get; set; }
/// <summary>
/// 成功
/// </summary>
/// <param name="data">数据</param>
/// <param name="msg">消息</param>
//public ResponseOutput<T> Ok(T data, string msg = "", ApiResponseCodeEnum code = ApiResponseCodeEnum.OK)
//{
// IsSuccess = true;
// Code = code;
// Data = data;
// ErrorMessage = msg;
// return this;
//}
public ResponseOutput<T> Ok(T data, object otherData, string msg = "", ApiResponseCodeEnum code = ApiResponseCodeEnum.OK)
public ResponseOutput<T> Ok(T data, object otherData, string msg = "", ApiResponseCodeEnum code = ApiResponseCodeEnum.OK)
{
IsSuccess = true;
Code = code;
Data = data;
OtherData=otherData;
OtherData = otherData;
ErrorMessage = msg;
return this;
@@ -64,12 +53,13 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// <param name="msg">提示消息</param>
/// <param name="data">数据</param>
/// <returns></returns>
public ResponseOutput<T> NotOk(string msg = "", T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.OK)
public ResponseOutput<T> NotOk(string msg = "", T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.OK, string localizedInfo = "")
{
IsSuccess = false;
Code = code;
Code = code;
ErrorMessage = msg;
Data = data;
LocalizedInfo = localizedInfo;
return this;
}
@@ -77,33 +67,6 @@ namespace IRaCIS.Core.Infrastructure.Extention
}
//public class ResponseOutput<T, T2> : IResponseOutput<T, T2>
//{
// [JsonProperty("Result")]
// public T Data { get; private set; }
// public T2 OtherInfo { get; private set; }
// public bool IsSuccess { get; private set; }
// public ApiResponseCodeEnum Code { get; set; }
// public string ErrorMessage { get; private set; }
// public ResponseOutput<T, T2> Ok(T data, T2 otherInfo, string msg = "")
// {
// IsSuccess = true;
// Data = data;
// OtherInfo = otherInfo;
// ErrorMessage = msg;
// return this;
// }
//}
/// <summary>
/// 响应数据静态输出 为了代码简洁 不用每处都New
/// </summary>
@@ -111,23 +74,6 @@ namespace IRaCIS.Core.Infrastructure.Extention
{
//public static IResponseOutput<T, T2> Ok<T, T2>(T data, T2 otherInfo, string msg = "")
//{
// return new ResponseOutput<T, T2>().Ok(data, otherInfo);
//}
/// <summary>
/// 成功 -----适合查询
/// </summary>
/// <param name="data">数据</param>
/// <param name="msg">消息</param>
/// <returns></returns>
//public static IResponseOutput<T> Ok<T>(T data = default, string msg = "")
//{
// return new ResponseOutput<T>().Ok(data, msg);
//}
public static IResponseOutput<T> Ok<T>(T data = default, object otherData = default, string msg = "", ApiResponseCodeEnum code = ApiResponseCodeEnum.OK)
{
return new ResponseOutput<T>().Ok(data, otherData, msg, code);
@@ -147,15 +93,11 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// <param name="msg">消息</param>
/// <param name="data">数据</param>
/// <returns></returns>
public static IResponseOutput<T> NotOk<T>(string msg = "", T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed)
public static IResponseOutput<T> NotOk<T>(string msg = "", T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed, string localizedInfo = "")
{
return new ResponseOutput<T>().NotOk(msg, data, code);
return new ResponseOutput<T>().NotOk(msg, data, code, localizedInfo);
}
//public static IResponseOutput<T> NotOk<T>( T data = default, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed)
//{
// return new ResponseOutput<T>().NotOk("", data, code);
//}
/// <summary>
/// 失败
@@ -164,7 +106,13 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// <returns></returns>
public static IResponseOutput<string> NotOk(string msg = "", ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed)
{
return new ResponseOutput<string>().NotOk(msg,code:code);
return new ResponseOutput<string>().NotOk(msg, code: code);
}
public static IResponseOutput<string> NotOk(LocalizedString msg, ApiResponseCodeEnum code = ApiResponseCodeEnum.BusinessValidationFailed)
{
return new ResponseOutput<string>().NotOk(msg, code: code, localizedInfo: $"[{msg.Name}]:{StaticData.Log_Locoalize_Dic[msg.Name]}" );
}
public static IResponseOutput<string> DBNotExistIfNUll(object businessObject)
@@ -172,7 +120,7 @@ namespace IRaCIS.Core.Infrastructure.Extention
return new ResponseOutput<string>().NotOk($"The business object{businessObject.GetType().Name} does not exist in the database, or was deleted by someone else, or an incorrect parameter query caused");
}
/// <summary>
/// 根据布尔值返回结果 --适合删除
/// </summary>
@@ -190,7 +138,7 @@ namespace IRaCIS.Core.Infrastructure.Extention
/// <returns></returns>
public static IResponseOutput<T> Result<T>(bool success, T data = default)
{
return success ? Ok<T>(data) : NotOk<T>("Saved failed",data);
return success ? Ok<T>(data) : NotOk<T>("Saved failed", data);
}
///// <summary>
@@ -0,0 +1,286 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
namespace IRaCIS.Core.Domain.Share;
public static class StaticData
{
public static Dictionary<string, string> En_US_Dic = new Dictionary<string, string>();
public static Dictionary<string, string> Zh_CN_Dic = new Dictionary<string, string>();
public static Dictionary<string, string> Log_Locoalize_Dic = new Dictionary<string, string>();
public static readonly string En_US_Json = "en-US.json";
public static readonly string Zh_CN_Json = "zh-CN.json";
public static class CultureInfo
{
public static readonly string zh_CN = "zh-CN";
public static readonly string en_US = "en-US";
public static readonly string en_US_bookMark = "en_us";
}
/// <summary>
/// 获取国际化
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static string International(string key, params object?[] args)
{
try
{
return string.Format(GetLanguageDictionary(key), args);
}
catch (Exception)
{
return string.Empty;
}
}
public static string GetLanguageDictionary(string key)
{
try
{
var type = Thread.CurrentThread.CurrentUICulture.Name;
if (type == "zh-CN")
{
return Zh_CN_Dic[key];
}
else
{
return En_US_Dic[key];
}
}
catch (Exception)
{
return string.Empty;
}
}
#region
public static readonly string Title = "Title";
public static readonly string ReadingType = "ReadingType";
public static readonly string Subspeciality = "Subspeciality";
public static readonly string Modality = "Modality";
public static readonly string Criterion = "Criterion";
public static readonly string ReviewType = "ReviewType";
public static readonly string ReadingStandard = "ReadingStandard";
#endregion
public static class Folder
{
public static readonly string Resources = "Resources";
public static readonly string IRaCISDataFolder = "IRaCISData";
public static readonly string OtherDataFolder = "OtherData";
public static readonly string TrialDataFolder = "TrialData";
public static readonly string SystemDataFolder = "SystemData";
public static readonly string SignDocumentFolder = "SignDocument";
public static readonly string DataTemplate = "DataTemplate";
public static readonly string EmailTemplate = "EmailTemplate";
public static readonly string CommonFile = "CommonFile";
public static readonly string TempFile = "TempFile";
public static readonly string NoticeAttachment = "NoticeAttachment";
public static readonly string DicomFolder = "Dicom";
public static readonly string NoneDicomFolder = "NoneDicom";
public static readonly string TreatmenthistoryFolder = "Treatmenthistory";
public static readonly string Reading = "Reading";
public static readonly string MedicalReview = "MedicalReview";
public static readonly string JudgeTask = "JudgeTask";
public static readonly string ReadingAnswer = "ReadingAnswer";
public static readonly string UploadEDCData = "UploadEDCData";
public static readonly string UploadFileFolder = "UploadFile";
}
public static class FileType
{
public static readonly string Zip = "zip";
}
public static class TrialOpt
{
//默认
public static readonly string AfterStopCannNotOpt = "AfterStopCannNotOpt";
//ongoing 前能操作 但是Stop后 也不能操作
public static readonly string BeforeOngoingCantOpt = "BeforeOngoingCantOpt";
public static readonly string AddOrUpdateTrial = "AddOrUpdateTrial";
public static readonly string SignSystemDocNoTrialId = "SignSystemDocNoTrialId";
}
public static class CacheKey
{
public static string StudyMaxCode = "StudyMaxCode";
public static string TaskMaxCode = "TaskMaxCode";
public const string UserTypeId = "UserTypeId";
}
public static class EmailSend
{
public static string EmailNamePlaceholder = "EmailNamePlaceholder";
}
/// <summary>
/// 医生学位等级
/// </summary>
public static class ReviewerDegree
{
public const string Bachelor = "Bachelor";
public const string Master = "Master";
public const string Doctorate = "Doctorate";
}
/// <summary>
/// 项目状态
/// </summary>
public static class TrialState
{
public const string TrialInitializing = "Initializing";
public const string TrialOngoing = "Ongoing";
public const string TrialCompleted = "Completed";
public const string TrialStopped = "Stopped";
}
public static class InternationalData
{
public const string Front = "Front";
}
/// <summary>
/// 匿名化配置 key
/// </summary>
public static class Anonymize
{
public const string Anonymize_FixedField = "Anonymize_FixedField";
public const string Anonymize_IRCInfoField = "Anonymize_IRCInfoField";
public const string Anonymize_AddFixedFiled = "Anonymize_AddFixedFiled";
public const string Anonymize_AddIRCInfoFiled = "Anonymize_AddIRCInfoFiled";
}
/// <summary>
/// 导出模板code
/// </summary>
public static class Export
{
public const string TrialList_Export = "TrialList_Export";
public const string TrialTrainingRecordList_Export = "TrialTrainingRecordList_Export";
public const string TrialSiteUserList_Export = "TrialSiteUserList_Export";
public const string TrialSiteUserSummary_Export = "TrialSiteUserSummary_Export";
public const string TrialUserList_Export = "TrialUserList_Export";
public const string TrialCRCUploadImageList_Export = "TrialCRCUploadImageList_Export";
public const string TrialQCVisitImageList_Export = "TrialQCVisitImageList_Export";
public const string TrialQCImageChanllengeList_Export = "TrialQCImageChanllengeList_Export";
public const string TrialSubjectList_Export = "TrialSubjectList_Export";
public const string TrialSubjectProgressList_Export = "TrialSubjectProgressList_Export";
public const string TrialSubjectReadingPeriodList_Export = "TrialSubjectReadingPeriodList_Export";
public const string TrialStudyList_Export = "TrialStudyList_Export";
public const string TrialStudyUploadMonitor_Export = "TrialStudyUploadMonitor_Export";
public const string TrialSubjectVisitCheckList_Export = "TrialSubjectVisitCheckList_Export";
public const string TrialReadingTaskList_Export = "TrialReadingTaskList_Export";
public const string TrialReReadingTaskList_Export = "TrialReReadingTaskList_Export";
public const string TrialMedicalReviewList_Export = "TrialMedicalReviewList_Export";
//public const string TrialRECIST1Point1SelfAnalysisList_Export = "TrialRECIST1Point1SelfAnalysisList_Export";
//public const string TrialRECIST1Point1GroupAnalysisList_Export = "TrialRECIST1Point1GroupAnalysisList_Export";
public const string TrialSelfAnalysisList_Export = "TrialSelfAnalysisList_Export";
public const string TrialGroupAnalysisList_Export = "TrialGroupAnalysisList_Export";
public const string OverallTumorEvaluation_Export = "OverallTumorEvaluation_Export";
public const string RECIST1Point1EvaluationOfTumorEfficacy_Export = "RECIST1Point1EvaluationOfTumorEfficacy_Export";
public const string RECIST1Point1DetailedOfEvaluatedLesion_Export = "RECIST1Point1DetailedOfEvaluatedLesion_Export";
public const string PCWG3Point1DetailedOfEvaluatedLesion_Export = "PCWG3Point1DetailedOfEvaluatedLesion_Export";
}
}