開篇
早年寫過一篇多語言的應用 : 本地化(多語言) 講述瞭如何創建多語言的資源文件,並利用資源文件來獲得頁面和請求的語言屬性
本次補充這篇文章,的原因是在實際項目中,有多種需要多語言的情況
比如:日誌要根據當前語言顯示
而有些情景比較複雜,我們可能的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) 錯誤提示
最後
如果你的系統有很多國家在使用,或者說一個系統有很多不同地區的人在使用
那麼這篇文章的知識點非常實用,因爲通過處理
可以使一些原本在數據庫的數據的固定通用部分也能得到完美的翻譯