我有一个网站在前端使用Angular,在后端使用C#。我有一个从数据库中获取数据的c#类。我有一个新的字段(值的西班牙语翻译)我想添加,并且不确定以下3个场景中的哪一个是最佳的。
这是代码目前的样子:
public class CustomerIssueManager
{
static public List<GenericRecordDTO> GetCustomerIssues(MyStore db)
{
List<GenericRecordDTO> responseDTO = new List<GenericRecordDTO>();
try
{
var customerIssues = db.CustomerIssues.Where(m => m.IsActive && m.Name.ToLower() != "none").OrderBy(o => o.Name).ToList();
foreach (var c in customerIssues)
{
GenericRecordDTO issue = new GenericRecordDTO();
issue.ID = c.ID;
issue.Value = c.Name;
responseDTO.Add(issue);
}
}
}
}
public class GenericRecordDTO
{
public int ID { get; set; }
public string Value {get; set; } = "";
}
这些是我正在考虑的场景:
场景1:将以下内容添加到GenericRecordDTO之间是否存在任何显着差异:
public string SpanishValue { get; set; } = "";
分歧:有许多类使用GenericRecordDTO,不需要SpanishValue
场景2:与创建另一个类相反:
public class GenericRecordTransDTO
并为其添加SpanishValue?解决方案1中的问题
场景3:与保持GenericRecordDTO.cs不同,但在CustomerIssueManager.cs中为西班牙语站点设置条件:
if(englishSite) { issue.Value = c.Name; }
else { issue.Value = c.SpanishName; }
我不确定此时是否可以查看西班牙语网站,或者我是否需要在以后查看?在这里检查西班牙语网站与后来的TypeScript / Angular有什么缺点吗?
我的问题是,为什么要在前端呢?这需要您在两个级别处理本地化,同时还将额外数据发送回浏览器,在许多情况下您不需要这些数据。
对我来说,我会决定语言服务器端并适当地加载内容。如果是西班牙语客户端请求数据,那么名称字段将是西班牙语名称,英语用户然后是英文名称等...这有利于处理服务器端的所有本地化,至少到目前为止作为字符串而言。
但是,重要的是要理解,本地化不仅仅是文本,因此您可能仍需要客户端格式化数字,日期等...为此,我建议使用格式化库来获取区域设置信息,然后提供此来自服务器的信息通过配置有效负载。
至于语言服务器端的检测,这可以通过多种方式完成。例如:
Accept-Language
标头来决定您要使用哪种语言。