ASP.NET MVC5+EF6+EasyUI 後臺管理系統(89)-國際化,本地化,多語言應用
開篇
早年寫過一篇多語言的應用 : 本地化(多語言) 講述瞭如何建立多語言的資原始檔,並利用資原始檔來獲得頁面和請求的語言屬性
本次補充這篇文章,的原因是在實際專案中,有多種需要多語言的情況
比如:日誌要根據當前語言顯示
而有些情景比較複雜,我們可能的key是提取自資料中,或者說一些錯誤的提示和模型介面欄位的顯示
下面我們回顧和新增一些實際應用
1.多語言使用
多語言基礎使用,請跳轉開篇早年寫的連線中 本地化(多語言)
多語言使用的名稱空間是 using System.Threading;
所以在後端.cs頁面或者前端檢視,你都必須引用 System.Threading
2.獲得當前多語言的名稱
string info = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
可獲得資原始檔的語言名稱 en-US / zh-CN / zh-TW
3.改變當前請求的語言
比如使用者請求的時語言是zh-CN,即中文,通過下面3行程式碼可設定改變當前的請求語言
CultureInfo culture = CultureInfo.GetCultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture;
示例程式碼
public ActionResult Create(string name) { int a=1; CultureInfo culture = CultureInfo.GetCultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; return View(Resource.建立成功); }
不使用時候,返回:建立成功 使用時返回:Insert Succeed
3.使用方式
由於資原始檔的後端程式碼也是一個類,Key是屬性,使用使用非常簡單
string value1 = Resource.Key00001; string value2 = Resource.Key00002;
4.使用場景一
舉個栗子:
比如我要寫段日誌:其中 姓名 與電話是變數
張三成功建立了一條客戶資訊,客戶名稱:李四,客戶電話:13800138000
那麼你可以使用格式化的方式來填充顯示的內容,日誌中,只要儲存值就可
string.Format(Resource.Key0001, "李四", "138XXXXXXXX");
5.通過Key反射出值
如果你不喜歡上面的情景,那麼可以使用下面一個方法,將key和值一起存到資料庫
舉個例子:表資料- Key00002:張三
那麼可以資管管理器提取Key來反射
ResourceManager resMan = new ResourceManager(typeof(Resource)); string val = resMan.GetString("Key000002");
6.MVC中模型屬性的註解
註解主要用於2個地方
- 1.模型驗證中的錯誤提示
- 2.DisplayFor 介面顯示
我們來看一個例子:
4個key中前面2個是錯誤提示
那麼我們的模型就是這麼做
[Display(Name = "Key00003", ResourceType = typeof(Resource))] [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "Key00001")] public string Name { get; set; }
那麼將獲得一個非空通過翻譯的提示和一個前端顯示翻譯的處理,這個MVC的支援還是最簡單完美的
@Html.LabelFor(model => model.Name) 獲得欄位 @Html.ValidationMessageFor(model => model.Name) 錯誤提示
最後
如果你的系統有很多國家在使用,或者說一個系統有很多不同地區的人在使用
那麼這篇文章的知識點非常實用,因為通過處理
可以使一些原本在資料庫的資料的固定通用部分也能得到完美的翻譯
&n