早年寫過一篇多語言的應用 : 本地化(多語言) 講述瞭如何建立多語言的資源文件,並利用資源文件來得到頁面和請求的語言屬性html
本次補充這篇文章,的緣由是在實際項目中,有多種須要多語言的狀況前端
好比:日誌要根據當前語言顯示數據庫
而有些情景比較複雜,咱們可能的key是提取自數據中,或者說一些錯誤的提示和模型界面字段的顯示後端
下面咱們回顧和新增一些實際應用post
多語言基礎使用,請跳轉開篇早年寫的鏈接中 本地化(多語言) ui
多語言使用的命名空間是 using System.Threading;url
因此在後端.cs頁面或者前端視圖,你都必須引用 System.Threadingspa
string info = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
可得到資源文件的語言名稱 en-US / zh-CN / zh-TW翻譯
好比用戶請求的時語言是zh-CN,即中文,經過下面3行代碼可設置改變當前的請求語言3d
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
因爲資源文件的後端代碼也是一個類,Key是屬性,使用使用很是簡單
string value1 = Resource.Key00001; string value2 = Resource.Key00002;
舉個栗子:
好比我要寫段日誌:其中 姓名 與電話是變量
張三成功建立了一條客戶信息,客戶名稱:李四,客戶電話:13800138000
那麼你可使用格式化的方式來填充顯示的內容,日誌中,只要存儲值就可
string.Format(Resource.Key0001, "李四", "138XXXXXXXX");
若是你不喜歡上面的情景,那麼可使用下面一個方法,將key和值一塊兒存到數據庫
舉個例子:表數據- Key00002:張三
那麼能夠資管管理器提取Key來反射
ResourceManager resMan = new ResourceManager(typeof(Resource)); string val = resMan.GetString("Key000002");
註解主要用於2個地方
咱們來看一個例子:
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) 錯誤提示
若是你的系統有不少國家在使用,或者說一個系統有不少不一樣地區的人在使用
那麼這篇文章的知識點很是實用,由於經過處理
可使一些本來在數據庫的數據的固定通用部分也能獲得完美的翻譯