2008-12-19 145 views
18

我需要本地化mvc应用程序的最佳实践方面的帮助, 我看到Oxite在BaseController中有一个名为Localize的基本方法,但本地化是视图还是Controller的本地化任务? 或者我应该使用resx文件/或使用数据库表?ASP.NET MVC本地化最佳实践?

+0

这是一个很好的方法http://stackoverflow.com/questions/381070/asp-net-mvc-localization-best-practice/12936708#12936708 – kbvishnu 2012-11-13 02:21:26

回答

14

创建您自己的HTML帮助,并使用它像<%= Html.Resource("Name") %>

详细信息可在blog岗位。

+9

大家都知道,现在的Ihar链接有一个更新。请参阅:http://blog.eworldui.net/post/2008/10/ASPNET-MVC-Simplified-Localization-via-ViewEngines.aspx – 2009-08-31 14:13:42

+1

更新后的链接也不起作用。 :( – bradjive 2010-03-16 13:32:49

0

如果要本地化的字符串是由视图生成的(例如文本字段前面的标签),则其本地化应位于视图中。

如果字符串是由控制器生成的,那么它的本地化也应该在那里。

10

有这个可here

本文很好的解决方案涵盖了本地化asp.net MVC应用程序

3

的方方面面MVC是真正了解如何使用正确的看法合适的工作。将所有内容放在资源文件中都非常有用。将资源文件用于小事情是很好的,但对于更大的页面(如描述页面),最好是在每个文化中都有大量内容的视图。例如,使用以下结构: 〜/ Views/en-US/Home/Index.aspx 〜/ Views/pt-BR/Home/Index.aspx or this structure: 〜/ Views/Home/Index.en -US.aspx 〜/浏览/首页/ Index.en-US.aspx

阅读如何做到这一点的博客:http://blog.oimae.com/2011/02/20/cultured-view-engine-for-mvc/

4

由于这一年的问题,我不知道的范围我的答案在这里。最近我遇到了这样的情况,即我需要在我的mvc网站中实现不同语言的本地化。

我考虑使用Resource文件。 它很容易实现,但问题是在开发阶段,我们需要指定本地化的字符串。所以如果它支持多语言,我们需要为每种语言制作资源文件。如果客户要更改或添加新语言,那么它非常困难,我们需要提供一个构建。

其次我考虑Satelite Assemblies。 它也类似于资源,但它给了一个自由来编辑组件,并将其放回bin文件夹。这也需要客户/开发者付出很大的努力。

第三我认为存储在分贝。 这种方法很好,我们有一些机制来从服务器读取数据。这需要一次性努力,客户没有任何可靠的。

我重写自定义DisplayNameAttributre并从构造我会通过数据库,并获得基于您的要求,它应该显示的视图你

数据来呈现。

资源管理器

/// <summary> 
    /// Extended display attribute which will handles the request 
    /// It will call every time when the property is rendered (return View() - from controller) 
    /// </summary> 
    public class ResourceManagerAttribute : DisplayNameAttribute 
    { 
     public ResourceManagerAttribute(string resourceKey, string resourceNameSpace = "") 
      : base(GetDisplayName(resourceKey, resourceNameSpace)) 
     { } 

     private static string GetDisplayName(string resourceKey, string resourceNameSpace = "") 
     { 
      // get the browser's prefered language. 

      string browserLanguage = HttpContext.Current.Request.UserLanguages.First(); 

      // Get the locale data for that property and displays. 
      switch (browserLanguage) 
      { 
       case "en-US": return "Eng " + resourceKey; 
      // calls db based on resource key 
       case "hi": return "Hin " + resourceKey; 

      } 
      return "-- Not Implemented Now -- "; 
     } 

视图模型

public class HomeViewModel 
    { 
     //calls the resource 
     [ResourceManager("MID")] 
     public int MID { get; set; } 
     [ResourceManager("Name")] 
     public string Name { get; set; } 
     [ResourceManager("Addess")] 
     public string Addess { get; set; } 
    } 
0

我会更好地去创建一个自定义MetadataProvider,并使用用于模型的约定。类似于1个资源文件的模型名称空间和一个像ModelName.PropertyName的常规 - >值

对于验证器,常用按钮等资源文件。

对于意见文本我实际上试图找到一个好方法。可能是编译前的视图预处理和本地化文本的自定义范围,因此预处理可以使用默认语言为每个视图创建资源文件。