2011-04-01 86 views
27

我正試圖在我的MVC 3應用程序中實現全球化/本地化。我不想爲每種語言使用不同的視圖。請建議我如何繼續。任何支持的鏈接/ URL都將非常有幫助。ASP.Net中的全球化MVC 3

回答

43

您本地化它以同樣的方式與任何其他應用程序是這樣的:

  1. 創建一個文件夾,例如叫它資源
  2. 右鍵單擊文件夾並添加類...選擇資源文件。給你任何你喜歡的東西Strings.resx
  3. 在文件的屬性,修改自定義工具是PublicResXFileCodeGenerator
  4. 用的名稱填充與翻譯鍵和值對資源文件(這將是默認的轉換)
  5. 創建其他資源他們的文化格式爲:{name} .de.resx eg Strings.de.resx
  6. (這是Razor)在Views文件夾中打開web.config並將其添加到/configuration/system.web.webPages.razor/pages/namespaces:< add namespace =「Resources」/>(假設資源是您創建資源的文件夾的名稱,並且您沒有更改資源文件本身的默認名稱空間)。 這一步意味着您不必在每次想要引用翻譯時在視圖中完全限定資源類。
  7. 使用替代文本的翻譯與下面的代碼你的觀點一樣:

    @Strings.MyString 
    

字符串將被自動翻譯成視圖視CultureInfo.CurrentCulture但這不是自動設置你

您將需要更改CurrentCulture(可能在Application_BeginRequest)。如何做到這一點取決於您,它可能是設置它的路由值,或者您可以閱讀用戶的瀏覽器語言

您可以在HttpContext.Current.Request.UserLanguages中找到用戶的首選語言列表(按順序)。

+0

非常感謝馬丁。 – Vivek 2011-04-01 07:22:01

+2

Oon第7步我在網上做同樣的事情。配置爲highligted,但得到錯誤「的類型或命名空間名稱*****'資源'找不到(你是否缺少一個使用指令或程序集引用?)」***** 「請詳細說明或提供任何示例應用程序 – sandeep 2011-05-21 10:20:51

+1

以下是您需要的最低限度的工作http://www.mediafire.com/file/5843d7tyqalv451/Globalization.zip – 2011-05-27 02:33:24

5
+0

這篇文章非常適合涵蓋語言,文化和地區之間的差異 - 但它會造成與abov相同的錯誤e以它在Web.config中調用不完整名稱空間的方式發佈。 – 2012-04-04 23:51:51

+0

它提到你需要爲你的視圖web.config添加命名空間 – 2012-04-09 03:11:37

5

一些細節添加到Martin Booth's great answer(萬一他的主人MediaFire鏈接可能會消失),這裏是我我這麼做的:

我用兩個文件,因爲我只需要英語和德國(「德」)現在:

enter image description here

對於每一個文件的屬性,我不得不手動輸入自定義工具還有自定義工具命名空間個值,爲每個文件:

enter image description here

enter image description here

最後,我進入了根web.config文件中的以下,低於<system.web>部分:

<globalization uiCulture="auto" culture="auto" /> 

當然我還在Web.Config文件的Views文件夾下添加了命名空間指令(ie沒有根的一個),馬丁介紹:

<add namespace="ViewResources" /> 

然後我終於可以訪問的資源在我的(部分)Razor視圖強類型:

<h2>@ViewResources.Test1</h2> 

BTW:這個曾與MVC 4 ,不僅MVC 3.