2008-12-19 211 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的常規 - >值

對於驗證器,常用按鈕等資源文件。

對於意見文本我實際上試圖找到一個好方法。可能是編譯前的視圖預處理和本地化文本的自定義範圍,因此預處理可以使用默認語言爲每個視圖創建資源文件。