2012-10-24 69 views
3

我想在我的ASP.NET MVC应用程序中实现GlobalizationLocalizationasp.net中的全球化MVC4

我经历了几个教程,如this

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

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

+0

我不会推荐多个视图。我喜欢OpenCart和其他软件如何做。他们有一个单独的语言文件夹。所有控制器动作首先调用语言方法来获取请求的特定语言,然后像任何其他变量一样将其返回到视图。当然,这适用于静态内容。对于数据库驱动的内容,您应该有一个单独的函数来获取所请求语言的特定字段。 – user1477388

回答

1

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

这就是说,当然你可以去做一些文化服务。所有你需要的是:

  • 文化服务(例如,单身或静态这就要看你的需求)
  • XML文件来保存键 - 值对每种语言的每个字符串

模式

  • 应用负载
  • 实例或静态配置的服务
  • 服务加载基于你希望它
  • 查看什么都相应的XML调用从上下文或静态方法@String.Format(Context.CultureService.GetFormat("HELLOWORLD"), "World")
  • 服务的服务返回一个格式字符串像"Hello %s!"从加载XML牵强

编辑

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

EDIT2

2更多的事情。

因为这整个@String.Format(Context.CultureService.GetFormat(), "")事情是那么长,考虑写一个帮手,让您可以编写类似@Globalize("HELLOWORLD", "World")

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