WPF 关于多语言 的实现 学习,利用反射中的特性

1、创建一个表示各语言显示string的特性类

MyAttribute
 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之类的,界面统一代码,多语言不用改前端(还没实际用过。。)

posted on 2013-03-18 16:52  xiaoboz  阅读(370)  评论(0编辑  收藏  举报

导航