asp.net MVC4中的全球化

时间:2012-10-24 12:43:41

标签: jquery asp.net-mvc

我想在ASP.NET MVC应用程序中实现GlobalizationLocalization

我经历了一些像this这样的教程。

但问题是他正在为每种语言创建多个视图。

因此,如果有10个视图,那么我们必须为每种语言创建10个视图,最多为100个。请指导我使用单个视图创建多语言(即8种语言)应用程序的最佳方式,如果可能的话,使用PO文件。< / p>

1 个答案:

答案 0 :(得分:1)

在我看来,做多个观点是最好的方法。如果你发现它太多了,那可能是因为你的MVC应用程序没有遵循适当的MVC模式。一个观点应该总是愚蠢的。如果一个观点是愚蠢的,那么唯一的就是写作和布局。

那说,当然你可以去做某种文化服务。您所需要的只是:

  • 文化服务(实例,单身或静态。这取决于您的需求)
  • 用于保存每种语言的每个字符串的键值对的XML文件

模式

  • 应用程序加载
  • 实例或静态配置服务
  • 服务根据您的需要加载适当的XML
  • 查看从上下文或静态方法@String.Format(Context.CultureService.GetFormat("HELLOWORLD"), "World")
  • 调用服务
  • 服务返回从加载的XML
  • 获取的格式字符串,如"Hello %s!"

修改

哦,要允许十进制/货币/日期默认全球化,您还应该考虑返回当前Culture的实例的Current属性。这样你可以像这样使用它:@ViewModel.SomeDate.ToString(Context.CultureService.Current.DateTimeFormat)

<强> EDIT2

另外两件事。

因为整个@String.Format(Context.CultureService.GetFormat(), "")事情太长了,所以考虑写一个帮助器,这样你就可以编写像@Globalize("HELLOWORLD", "World")

这样的东西。

考虑使用Enums来概括字符串数据。通过摆脱魔术字符串,它将在视图中更加清晰,并且它将允许更容易的重构。结果可能类似于@Globalize(HOME.Hello, User.Name)