早年写过一篇多语言的应用 : 本地化(多语言) 讲述了如何建立多语言的资源文件,并利用资源文件来得到页面和请求的语言属性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) 错误提示
若是你的系统有不少国家在使用,或者说一个系统有不少不一样地区的人在使用
那么这篇文章的知识点很是实用,由于经过处理
可使一些本来在数据库的数据的固定通用部分也能获得完美的翻译