2012-10-24 94 views
3

我想在我的ASP.NET MVC應用程序中實現GlobalizationLocalizationasp.net中的全球化MVC4

我經歷了幾個教程,如this

但問題是他正在爲每種語言創建多個視圖。

因此,如果有10個視圖,那麼我們必須爲每種語言創建10個視圖,總計爲100個。請指導創建多語言(即8種語言)應用程序的最佳方式,即單個視圖和PO文件。

+0

我不會推薦多個視圖。我喜歡OpenCart和其他軟件如何做。他們有一個單獨的語言文件夾。所有控制器動作首先調用語言方法來獲取請求的特定語言,然後像任何其他變量一樣將其返回到視圖。當然,這適用於靜態內容。對於數據庫驅動的內容,您應該有一個單獨的函數來獲取所請求語言的特定字段。 – user1477388

回答

1

在我看來,做多個視圖是最好的方法。如果你發現它太多了,可能是因爲你的MVC應用程序沒有遵循適當的MVC模式。一個觀點應該總是愚蠢的。如果一個觀點是愚蠢的,它唯一的東西是寫作和佈局。

這就是說,當然你可以去做一些文化服務。所有你需要的是:

  • 文化服務(例如,單身或靜態這就要看你的需求)
  • XML文件來保存鍵 - 值對每種語言的每個字符串

模式

  • 應用負載
  • 實例或靜態配置的服務
  • 服務加載基於你希望它
  • 查看什麼都相應的XML調用從上下文或靜態方法@String.Format(Context.CultureService.GetFormat("HELLOWORLD"), "World")
  • 服務的服務返回一個格式字符串像"Hello %s!"從加載XML牽強

編輯

哦,要允許十進制/貨幣/日期默認全球化,您還應該考慮返回當前Culture的實例的Current屬性。這樣,你可以使用它像這樣:@ViewModel.SomeDate.ToString(Context.CultureService.Current.DateTimeFormat)

EDIT2

2更多的事情。

因爲這整個@String.Format(Context.CultureService.GetFormat(), "")事情是那麼長,考慮寫一個幫手,讓您可以編寫類似@Globalize("HELLOWORLD", "World")

考慮使用枚舉歸納字符串數據。通過擺脫魔法字符串,它的視圖會更清晰,並且可以更輕鬆地進行重構。結果可能類似於@Globalize(HOME.Hello, User.Name)