ASP.NET MVC本地化最佳实践?

时间:2008-12-19 14:16:51

标签: asp.net-mvc localization

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

6 个答案:

答案 0 :(得分:14)

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

一样使用它

详情见blog帖子。

答案 1 :(得分:10)

这个可用的here

有很好的解决方案

本文涵盖了本地化asp.net mvc app的所有方面

答案 2 :(得分:4)

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

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

其次我考虑Satelite Assemblies。  它也类似于Resource,但它可以自由地编辑组件并将其放回bin文件夹。这也需要客户/开发人员付出很多努力。

第三我考虑在db中存储。  这种方法很好,我们有一些从服务器读取数据的机制。这需要一次性努力,而客户端没有任何可靠的。

我重写了一个自定义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; }
    }

答案 3 :(得分:3)

MVC更多的是为正确的工作使用正确的视图。将所有内容放在资源文件中是非常有意义的。将资源文件用于小事情是很好的,但对于像描述页面这样的较大页面,最好在每种文化中都有大量内容的视图。例如,使用以下结构: 〜/查看/ EN-US /首页/的Index.aspx 〜/查看/ PT-BR /首页/的Index.aspx 或这个结构: 〜/浏览/首页/ Index.en-US.aspx 〜/查看/主页/ Index.en-US.aspx

阅读博客,了解如何操作:http://blog.oimae.com/2011/02/20/cultured-view-engine-for-mvc/

答案 4 :(得分:0)

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

如果字符串是由Controller生成的,那么它的本地化也应该存在。

答案 5 :(得分:0)

我最好去创建自定义MetadataProvider并使用模型的约定。类似于模型命名空间的1个资源文件和类似ModelName.PropertyName的约定 - &gt;值

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

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

相关问题