zoukankan      html  css  js  c++  java
  • 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之类的,界面统一代码,多语言不用改前端(还没实际用过。。)

  • 相关阅读:
    下载某页面下的所有图片
    ruby程序处理HTML编辑器内容只保留类似UBB的内容
    用ruby获取Email邮箱标题并判断
    Win7 Ruby on rails 开发环境安装
    [SQL2005触发器学习]5、触发器的使用技巧
    使用jquery获取checkbox组和radio组的值
    一个小bug 看浏览器内核加载页面的方式
    我们是一群和平年代充满浮躁与抱怨的程序员
    COM+异常:系统找不到指定的文件。 (异常来自 HRESULT:0x80070002)
    以过桥算法来谈如何满足客户的需求和程序设计步骤
  • 原文地址:https://www.cnblogs.com/xiaoboz/p/2966352.html
Copyright © 2011-2022 走看看