我需要帮助进行本地化asp mvc应用程序的最佳实践, 我看到Oxite在BaseController中有一个名为Localize的基本方法,但是Localization是视图或Controller的任务吗? 或者我应该使用resx文件/还是使用数据库表?
答案 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;值
对于验证器,常用按钮等资源文件。
对于观看文本,我实际上是想找到一个好方法。可能是编译前的预处理视图和本地化文本的自定义范围,因此预处理可以使用默认语言为每个视图创建资源文件。