返回首页

简介
在当今世界的定位成为一个必须的要求,我们开发的应用程序。我们可以很容易地实现这一目标,通过使用静态资源,如异常消息recource文件,标签文本等,但使用本地化数据从数据源获取,将是一个问题。由于数据是动态的,这个问题不能得到解决,与资源文件。使用代码
大多数开发人员解决这个问题,使用下面这样的设计,
{S0的} NBSP。,如果我们看一下在设计中我们看到,我们正在创造一个新的对象每个属性包含多语言数据。所有这些对象的原因开发人员编写更多的代码,也将应用程序代码易于管理。此外,如果开发人员正在使用的ORM工具,他/她最终将创造大量的映射。现在,让我们想从另一个角度看,并尝试实现一个象下面这样
{S} NBSP的设计。正如你可以看到这样的设计更简单理解,并具有较高的可重用性。您可以使用的MultilanguageProperty,多语言数据存储在一个object.nbsp财产;
现在让我们看看我们如何才能从design.nbsp写此代码,让所有的代码
第一语言类,我们将使用MultilanguageProperty.nbsp;

    public class Language

    {

        public enum ApplicationLanguage

        {

            Turkish,

            English,

        }

        public static ApplicationLanguage GetDefaultLanguage()

        {

            return ApplicationLanguage.Turkish;

        }

    } 
正如你可以看到我们定义的语言,我们要使用一个枚举。和我们实行的方法,是负责返回的默认语言。此方法可以返回默认语言,每节或每用户的基础上指出implementation.nbsp
让开始编码MultilanguageProperty object.nbsp;
{C}
首先使用我们正在对象的通用与任何类型的对象。并允许用户在此对象的子项,我们作为above.nbsp实现IEnumerable接口; NBSP遍历
声明一个属性,其类型是IDictionary的是这种实现的主要思想。这本字典将存储基于语言值的数据。正如你可以看到IDictinary是一个ApplicationLanguage枚举键和T值的泛型类型的泛型类型。在我们的代码的构造,我们创建例如本Dictionary.nbsp;
现在,让我们执行一些代码到访问值property.nbsp存储数据;
        public T GetValue(Language.ApplicationLanguage language)

        {

            return (T)Values[language];

        }

        public T GetValue()

        {

            Language.ApplicationLanguage applicationLanguage = Language.GetDefaultLanguage();

            return (T)Values[applicationLanguage];

        }

        public T this[Language.ApplicationLanguage l]

        {

            get

            {

                return Values[l];

            }

            set

            {

                Values[l] = value;

            }

        }

        public static implicit operator T(MultilanguageProperty<T> instance)

        {

            if (instance == null)

            {

                return default(T);

            }

            return instance.GetValue();

        }

        public static implicit operator List<KeyValuePair<Language.ApplicationLanguage,T>>(MultilanguageProperty<T> instance)

        {

            if (instance == null)

            {

                return null;

            }

            return instance.Values.ToList();

        }

        #region IEnumerable<KeyValuePair<ApplicationLanguage,T>> Members

 

        public IEnumerator<KeyValuePair<Language.ApplicationLanguage, T>> GetEnumerator()

        {

            return Values.GetEnumerator();

        }

 

        #endregion

 

        #region IEnumerable Members

 

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()

        {

            return Values.GetEnumerator();

        }

 

        #endregion

    }

} 
的正如你可以看到两个重载GetValue方法。其中一个返回值的默认语言和其他回报的为作为parameter.nbsp通过语言的价值;
也有一个索引属性来访问一个索引值。和有一个隐含的运营商,是指不使用任何演员访问的默认语言值或转换function.nbsp的;
现在让我们创建一个测试application.nbsp;
{体C3}
这里是测试应用程序的输出
{S2的} NBSP。
请随意联系任何questions.nbsp的我;
历史
2011年12月22日:初步Versionnbsp;

回答

评论会员:!好主意和实施 时间:2012/02/07
ezekjh
评论会员:游客 时间:2012/02/07
聪明的和有益的。伟大的工作
richinsea:我们发现在第三个框中没有出现在开头
好文章,虽然
评论会员:游客 时间:2012/02/07
马哈茂德FathyAfify:非常方便的多语言支持设计
添马舰奥兹
评论会员:感谢 时间:2012/02/07
思南吉隆坡
评论会员:谢谢你 时间:2012/02/07
添马舰奥兹:感谢思南
评论会员:Monjurul哈比卜 时间:2012/02/07
漂亮的
评论会员:添马舰奥兹 时间:2012/02/07
谢谢你
评论会员:sudhansu_k123 时间:2012/02/07
添马舰。良好的书面和有用的文章。
{A}
评论会员:添马舰奥兹 时间:2012/02/07