1、创建一个表示各语言显示string的特性类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 4 namespace MyTypeLib 5 { 6 public sealed class DisplayAttribute : System.Attribute 7 { 8 public String Description { get; set; } 9 public Dictionary<string, string> Display = new Dictionary<string, string>(); 10 public DisplayAttribute() { } 11 //public DisplayAttribute(string s) 12 //{ 13 // Description = s; 14 //} 15 public DisplayAttribute(string se, string sc, string sj) 16 { 17 Display.Add("English", se); 18 Display.Add("中文", sc); 19 Display.Add("日本語が", sj); 20 } 21 public DisplayAttribute(string se, string sc) 22 { 23 Display.Add("English", se); 24 Display.Add("中文", sc); 25 Display.Add("日本語が", se); 26 } 27 public DisplayAttribute(string se) 28 { 29 Display.Add("English", se); 30 Display.Add("中文", se); 31 Display.Add("日本語が", se); 32 } 33 } 34 }
2、将特性赋予给Model中的各个Property(Method等大概也行的),赋予对应的各语言的显示string,如下:
1 [Display("IF Transfer Mode","固定模式")] 2 public enum EIFTXMODE 3 { 4 [Display("Sequence", "序列","シーケンス")] 5 e_sequence = 0, 6 [Display("Cross", "交叉","クロス")] 7 e_cross = 1, 8 }
3、在访问Model实例的地方取实例类型,利用C#的特性API获取制定的特性值(在用户已知特性的访问方式的前提下),通过一个按Key取值就可以获得对应语言的显示方式了,大体如此:
1 EIFTXMODE i = EIFTXMODE.e_cross; 2 Type t = typeof(EIFTXMODE); 3 FieldInfo fi = t.GetField(i.ToString()); 4 object[] o = fi.GetCustomAttributes(false); 5 foreach (DisplayAttribute item in o) 6 { 7 Console.WriteLine("{0}: {1}", fi.Name, item.Display["English"]); 8 Console.WriteLine("{0}: {1}", fi.Name, item.Display["中文"]); 9 Console.WriteLine("{0}: {1}", fi.Name, item.Display["日本語が"]); 10 }
输出:
e_cross: Cross e_cross: 交叉 e_cross: クロス
4、我所见的好处是可以把Key绑到前台的Combox之类的,界面统一代码,多语言不用改前端(还没实际用过。。)