zoukankan      html  css  js  c++  java
  • 多语言的2种实现方式对比

    分别尝试过2种多语言的实现方式:1.文件、2.资源包。

    一、简要说一下实现过程

    1、文本

    主要是以文本形式存储key-value键值对,然后用工具类Localizer负责加载对应的文件:en-US或zh-CN

    _Confirm=Confirm //en-US
    _Confirm=提示 //zh-CN
    
    MessageBox.Show(Localizer.Instance["_Confirm"]); //使用的时候
    

    2、资源包

    这是微软默认的实现方式,主要是生成对应的资源包*.resources.dll,并通过ApplyResources加载。

    //在设计器->属性里,设置
    Localizable = true;
    Language = 英语(美国);
    

    改完之后,会自动生成一个form.en-US.resx,编译后生成对应的资源包*.resource.dll。

    //使用的时候
    var res = new ComponentResourceManager(form.GetType());
    res.ApplyResources(form, "$this");
    foreach (var ctl in form.Controls) {
       res.ApplyResources(ctl, ctl.Name);
    }
    

    二、做个对比

      1、文本 2、资源包
    功能 只能支持文本和位置,但位置调整很不方便,暂不支持图片(需要序列化),无法支持动态列 能很好的支持文本、位置、图片,且调整方便,无法支持动态列
    子系统的工作量 是资源包的3倍,en-US/zh-CN都要手写,子类里要覆写LanguageChanged事件 只需新增其他语言如en-US,默认的语言不用动,也不用覆写事件
    不实现该功能时,对子系统的影响 必须正确实现所有key-value,否则界面上会显示key值
    容错性(子系统实现有误时,系统是否会出错) 低,子系统必须正确实现所有key-value,如果遗漏,界面上会出现不正确的描述。界面变更时,也容易产生遗漏 高,如果有遗漏,就显示默认语言
    灵活性(发布后是否可以任意修改) 高,子系统甚至用户都可以随时修改不合适的翻译,不需要再次编译 低,每次修改后都必须重新编译生成并发布
    可维护性 不需要针对新的控件做特殊处理 需要针对新的控件如Dx等补充相应的ApplyResources代码,需要逐步完善
    适用范围 较广,语言无关 只针对.net下的应用,因为有一整套自动生成代码、资源本地化工具、类库的支持

    三、小结

    以.net的应该来说,推荐使用方式2,功能全面也很方便,毕竟功能和工作量才是我们关心的大头,还是印证了那句话,微软的东西要用就用全套。

  • 相关阅读:
    jQuery EasyUI介绍
    CodeMirror:基于JavaScript的代码编辑器
    概述:分布式文件系统+分布式存储+分布式处理
    HTML学习笔记——标准网页设计+使用CSS、Javascript
    HTML学习笔记——常用元素及其属性(二)
    HTML学习笔记——常用元素及其属性(一)
    Remmarguts' Date(k短路问题)
    K短路问题模板(spfa+A*)
    树状数组求逆序对模板
    桐桐的糖果计划(tarjan求桥+双连通分量)
  • 原文地址:https://www.cnblogs.com/AlexanderYao/p/4513665.html
Copyright © 2011-2022 走看看