问题描述
我们的电子学习平台使用名为 SendGrid 的第三方电子邮件服务来发送我们的电子邮件。我们将一个 JSON 对象传递给平台,我们的模板使用 Handlebars 动态填充来自 JSON 对象的值。
我们传递的典型 JSON 对象如下所示:
{
"To": "abc@xyz.com","From": "zxy@abc.com","Subject": "Online Course","TemplateData": {
"CourseName": "Course 1","LoginPage": "https://www.login.com"
}
}
我们开始实施多语言支持。我们可以将 Handlebars 添加到我们的模板中以执行条件 if-then 语句,以根据传入的语言动态填充正确的翻译文本。 所以我设想使用我们传入的语言向 TemplateData 添加一个新的 Language 键,如如下:
"TemplateData": {
"CourseName": "Course 1","Language": "en-US","LoginPage": "https://www.login.com"
}
不幸的是,我意识到他们在 Handlebars 中的 if-else 条件只支持布尔比较,所以它必须看起来像这样:
"TemplateData": {
"CourseName": "Course 1","en-US": true
"LoginPage": "https://www.login.com"
}
由于语言部分(例如 en-US、en-CA、fr-FR 等)是从存储过程传入的变量,因此我不能仅在对象定义中静态设置语言键。
反序列化后的对象如下:
public abstract class CpiEmailMessage : IEmailMessage
{
public string To { get; protected set; }
protected static string FromEmail => "noreply@cpilearning.com";
protected static string FromName => "CPI Learning";
protected Dictionary<string,string> CustomArgs(int emailLogId) => new
Dictionary<string,string>
{
{ "SystemSource","HoneyBee.Integrations" },{ "Env",ConfigurationManager.AppSettings.Get("Env") },{ "EmailLogId",$"{emailLogId}" }
};
public abstract EmailSendRequest ToEmailSendRequest(int emailLogId);
public abstract EmailLog ToLogEmailCommandRequest(int currentUser,bool sent);
}
public class PurchaseEmailMessage : CpiEmailMessage
{
private string Subject { get; }
public string CourseName { get; }
public string CourseLanguage { get; set; }
public string LoginPage { get; set; }
public string Url { get; }
public string OnlineOnly { get; }
private static EmailType MessageTemplateKey => EmailType.PURCHASE;
public PurchaseEmailMessage(string to,string subject,string courseName,string courseLanguage,string loginPage,string cmsURL,string onlineOnly)
{
To = to;
Subject = subject;
CourseName = courseName;
CourseLanguage = courseLanguage;
LoginPage = loginPage;
Url= cmsURL;
OnlineOnly = onlineOnly;
}
public override EmailSendRequest ToEmailSendRequest(int emailLogId)
{
return new EmailSendRequest
{
To = To,FromEmail = FromEmail,FromName = FromName,Subject = Subject,MessageTemplateKey = MessageTemplateKey,TemplateData = new
{
Course = CourseName,LoginUrl = LoginPage
},CustomArgs = CustomArgs(emailLogId),EmailLogId = emailLogId,Categories = new List<string> { "Seat Purchase" }
};
}
}
如何获取语言变量 (en-US) 并使其成为 TemplateData 中具有“true”值的键?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)