3

我想在我的 ASP.NET MVC 应用程序中实现Globalization和。Localization

我经历了几个这样的教程

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

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

4

1 回答 1

1

在我看来,做多个视图是最好的方法。如果你觉得它太麻烦,可能是因为你的 MVC 应用程序没有遵循正确的 MVC 模式。视图应该永远是愚蠢的。如果一个视图是愚蠢的,它唯一的东西就是文字和布局。

也就是说,你当然可以去做某种文化服务。所有你需要的是:

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

图案

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

编辑

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

编辑2

还有2件事。

因为这整件事@String.Format(Context.CultureService.GetFormat(), "")太长了,考虑写一个助手,这样你就可以写出类似的东西@Globalize("HELLOWORLD", "World")

考虑使用枚举来概括字符串数据。通过摆脱魔术字符串,视图将更加清晰,并且可以更轻松地进行重构。结果可能类似于@Globalize(HOME.Hello, User.Name)

于 2012-10-24T13:40:06.450 回答