开篇

早年写过一篇多语言的应用 :   本地化(多语言)   讲述了如何创建多语言的资源文件,并利用资源文件来获得页面和请求的语言属性

本次补充这篇文章,的原因是在实际项目中,有多种需要多语言的情况

比如:日志要根据当前语言显示

而有些情景比较复杂,我们可能的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)
错误提示

最后

如果你的系统有很多国家在使用,或者说一个系统有很多不同地区的人在使用

那么这篇文章的知识点非常实用,因为通过处理

可以使一些原本在数据库的数据的固定通用部分也能得到完美的翻译

最新文章

  1. Node.js写文件的三种方法
  2. HTTP压力测试工具
  3. VB6.0对鼠标滚轮不支持的解决方法[转]已经测试work
  4. Shell 字符串常见操作
  5. JDBC批量处理
  6. Linux rpm 命令参数
  7. SQL Server Profiler参数说明
  8. mybatis UpdateByExampleMapper UpdateByExampleSelectiveMapper
  9. XCODE6 提交至 App Store
  10. jQuey事件委托
  11. 【转载】Java StringBuffer与StringBuider
  12. RequireJs 深入理解
  13. java中的多态案例
  14. Ambari Agent 源码分析
  15. PHP计算连续签到天数以及累计签到天数
  16. CurrentHashMap、HashMap、HashTable的区别
  17. [UE4]组件
  18. import依赖范围的使用
  19. NotePad++替换行前、行后空格,替换空行
  20. 高斯消元模板(pascal)

热门文章

  1. Flink相对于Spark的优点
  2. BloomFilter中保存的数据量
  3. Spring Data JPA 的 Specifications动态查询
  4. Java项目连接数据库Mysql报错create connection SQLException
  5. 1.k8s概述、安装、名词解释、资源清单
  6. MGRE综合实验
  7. vSphere Esxi 6.x 常用序列号
  8. SpringBoot 与 SpringSecurity
  9. 还在使用Future轮询获取结果吗?CompletionService快来了解下吧。
  10. [LeetCode]Subtree of Another Tree判断一棵树是不是另一棵树的子树