【问题标题】:System message localization系统消息本地化
【发布时间】:2017-02-07 17:28:48
【问题描述】:

我有一个 Asp.Net MVC 网站。在网站上有一些通知,我想本地化系统发送给用户的通知。有点像 StackOverflow 显示的内容,但是当用户更改他们的语言时,我希望他们以他们的语言看到通知。

我想知道对此的最佳解决方案是什么。我可以将消息保存为enum,并将相关信息的 ID 保存为几个ints。像这样:

public class NotificationMessage
{
    [Required]
    public virtual ApplicationUser User { get; set; }

    public NotificationMessageType Type { get; set; }

    public int Id1 { get; set; }
    public int Id2 { get; set; }
    public int Id3 { get; set; }
}

问题在于 ID。它们意义不大,也不是强类型,所以我必须知道如何根据类型使用它们。

另一种解决方案是将其保存为字符串,如果语言不是英语,则尝试翻译它。这很容易变得混乱。

最后的方法是将消息存储为当前选择的语言,当他们更改语言时,消息将保持不变,新消息将使用新语言。

也许有更好和更标准的方法,但我只是想出了这些。

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-mvc-5 localization


【解决方案1】:

正如我建议的那样,您必须将所有通知以不同语言作为主存储一次

English -this is a pen for {0} and {1}

Germen -dies ist ein Stift {0} und {1}

根据选择消息并传递参数显示何时需要发送通知

【讨论】:

  • 所以这将是我提到的第一个解决方案,对吗?这样我必须将这些参数存储为整数 ID。因为不同类型的通知会有不同数量的参数,甚至不同的类型
  • 是的。你必须用不同的语言和所需的参数存储每个通知,所以在创建通知时你必须通过传递参数值来使用 String.Format,
  • 我没有找到任何其他方法来做同样的事情,或者您无法将通知翻译成不同的语言,因为没有任何翻译者能够准确地翻译我们想要的整个句子。
  • 好的。谢谢你。我想我将不得不选择那个选项。另外,我正在考虑以最后一种语言缓存消息,因此只有当用户更改语言时,它才会重新创建并重新缓存消息。 (避免每次都进行一堆查询)
猜你喜欢
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多