版权所有©1993-2019金蝶国际软件集团有限公司④内部公开请勿外传金蝶s-HR开发培训—多语言金蝶中国HR产品部2021-04——后端多语言、前端多语言、时区格式2①绝密信息严禁泄露01后端多语言02前端多语言03时区格式33目录本章节培训内容了解s-HR平台后端多语言设计多语言元数据词条词条抽取、翻译及应用44多语言-介绍s-HR多语言支持三种语言,默认有:简体中文、繁体中文、英文其中“简体中文”为基础语言多语言内容一般分为词条和翻译多语言词条来源可以分为:实体、UI、枚举/异常、查询、资源、子系统树等其中UI词条类型又可分为:视图、ftl、javascript、jsp、javaScriptPlugin55多语言-介绍平台多语言框架图示:66多语言-元数据实体在设计实体时,如果为多语言字段,需要注意勾选如下图选项,该选项在生成数据表时会生成l1、l2、l3三个不同的字段如displayName属性,其英文、简体中文、繁体中文分别为f_displayName_l1、f_displayName_l2、f_displayName_l377多语言-元数据资源(词条常量)在java代码中有时遇到需要引用词条翻译,此时不能直接在java代码中直接硬编码,可以利用多语言资源文件引用词条翻译;88多语言-元数据资源(词条常量)多语言资源词条翻译可以在java中按如下方式获取:EJB端调用方式com.kingdee.shr.ml.util.SHRServerResource.getString(StringresClassName,StringresName,Contextctx);如:Stringobj=com.kingdee.shr.ml.util.SHRServerResource.getString("com.kingdee.shr.base.syssetting.SuspendedWorkflowResourse","dear_user",ctx);WEB端调用方式com.kingdee.shr.base.syssetting.ml.SHRWebResource.getString(StringresClassName,StringresName);如:Stringobj=com.kingdee.shr.base.syssetting.ml.SHRWebResource.getString("com.kingdee.shr.base.syssetting.SuspendedWorkflowResourse","dear_user");如果资源文件带动态参数,需要格式化处理如:StringrealObj=java.text.MessageFormat.format(obj,param1,param2,…);99多语言-元数据异常元数据异常要继承至com.kingdee.eas.common.EASBizException如果有动态参数,需做替换处理,列子(参考:com.kingdee.eas.common.EASBizException):如果没有动态参数,只需要定义名称、子异常号、异常信息如果有参数,在对应位置使用{0}、{1}、{2}….等占位1010多语言-元数据异常thrownewXXXXException(XXXException.XXXXXXX,newObject[]{param1,param2,….});1111多语言-服务端sql的硬编码处理方案比如:person.entity中,要查询name字段,name是多语言,查询时候不能直接写死成这样Stringsql=“selectfname_l2fromt_bd_person”;写成如下方式:Stringl=com.kingdee.shr.base.syssetting.util.LocaleUtils.getShortCode(Contextctx);StringBuffersql=newStringBuffer(“selectfname_”).append(l).append(“fromt_bd_person”);1212多语言-词条抽取经开发后,我们新增的词条可能来源有:元数据(实体、枚举/异常、查询、资源、子系统树)、UI(视图xml)这些词条需要经过抽取->翻译->应用,才能达到最终效果1313多语言-元数据抽取管理员登录金蝶EAS客户端路径:系统平台-->多语言管理-->词条抽取,然后选择“抽取界面词条”,在元数据文件选择中,选择前面我们新增或修改的元数据文件,一般以“*-metas.jar”为文件名,确定抽取即可;1414多语言-词条查询前面抽取词条后,查询词条有无抽取成功管理员登录s-HRweb管理平台路径:开发平台多语言管理平台界面词条库根据条件查询,如查询异常com.kingdee.eas.hr.base.HRBaseException1515多语言-词条翻译管理员登录s-HRweb管理平台路径:系统平台-->多语言管理-->资源翻译库点击按钮“更多”“获取新词条”,等待完成在该列表查询未翻译的词条,引出后翻译,翻译完成后再引入即可1616多语言-词条应用管理员登录s-HRweb管理平台路径:系统平台-->多语言管理-->资源翻译库在该列表查询已翻译的词条,选中或不选点击按钮“更多”“应用到界面词条库”或“应用到预置数据词条”,等待完成即可17①绝密信息严禁泄露01后端多语言02前端多语言03时区格式1818目录本章节培训内容了解s-HR平台多语言前端工具设计词条抽取、翻译及应用1919多语言-词条流程前端词条翻译应用流程:2020多语言-词条抽取(js)管理员登录,在开发平台->多语言管理平台->js硬编码批量维护前提:必须是当前视图中引入的包含中文的javascript文件2121多语言-多语言组件逻辑1.在系统开启多语言的情况下,多语言输入器默认展示3种,分别为英文/简体/繁体2.在开启简繁体转换的情况下(简繁体转换默认开启),简体和繁体实时转换3.在单据新增场景下,默认会填充为空的栏位,即:只填写任何一个栏位即可保存4.在单据修改的场景下,默认不会填充任何栏位,全部以用户操作为准,即:如果该字段必填,如果用户删除某一个语言,则校验不通过,必须3种都填充5.在关闭简繁体转换的情况下,简体和繁体则不会实时转换6.在单据新增场景下,和开启简繁体逻辑相同,会填充为空的栏位,只是不会简繁体转换7.在单据修改的情况下,同样不会填充任何栏位,也不会简繁体转换2222多语言-组件使用•初始化多语言输入器:•vartext_json={•id:'xxx',//元素id,非必填•name:'xxx',//元素字段,非必填•value:{l1:'xxx',l2:'xxx',l3:'xxx'},//默认值,必填•readonly:false,//是否只读,非必填•validate:"{maxlength:255,required:true}"//校验,非必填•}•$('选择器').shrMultiLangBox(text_json)•多语言输入器禁用:•$('选择器').shrMultiLangBox('disable')•多语言输入器启用:•$('选择器').shrMultiLangBox('enable')多语言输入器取值:$('选择器').shrMultiLangBox('getValue')多语言输入器设置值:$('选择器').shrMultiLangBox('setValue',{l1:'xx',l2:'xx',l3:'xx'})2323多语言-判断语种在前端js中可以使用languageMappingList.length>1如果返回true,代表已经启用了多语言,否则没有启用多语言2424多语言-资源文件-命名在服务器对应的多语言目录下新建资源文件,文件名称包含ext以区分二开和标准产品,并且以语种简称作为结尾。注意:此种文件对应语种需自行翻译例如薪酬:\server\deploy\easweb.ear\shr_web.war\addon\compensation\web\js\i18n2525多语言-资源文件-引入可以通过视图或者js引入对应的二开资源文件:视图:${contextLanguage}:当前登录系统语种简称,例如:zh_CN,en_US…Js:shr.loadScript("/shr/addon/compensation/web/js/i18n/compensation_ext_i18n_"+contextLanguage+".js");contextLanguage:当前登录系统语种简称,例如:zh_CN,en_US…2626多语言-资源文件-编写资源文件编写规范:;(function($){//该行内容与标准文件一致$.compensationI18n=$.compensationI18n||{};//该行内容与标准文件一致$.extend(true,$.compensationI18n,{//必须要加true,代表递归合并对象key:'xxx'//维护词条})})(jQuery);//该行内容与标准文件一致2727多语言-资源文件-编写如果修改标准词条,请将标准产品资源文件中词条对应的key值复制到二开资源文件中进行重写,如果是新增词条,则可以自行命名,以ext结尾2828多语言-资源文件-应用Js中获取词条举例:$.compensationI18n.intel.intelRule.title29①绝密信息严禁泄露01后端多语言02前端多语言03时区格式3030目录本章节培训内容了解s-HR平台时区格式前端会使用3131时区格式设置3232时区格式-时间日期组件格式s-HR8.6sp1之后所有的时间组件统一改为dateTimePicker根据不同的dataType渲染不同的时间组件:time,timeStamp,dateS-HR日期时间格式后端存举例前端默认展示启用去尾参数后,前端展示timeyyyy-mm-ddhh:mm:sshh:mm:sshh:mmtimeStampyyyy-mm-ddhh:mm:ssyyyy-mm-ddhh:mm:ssyyyy-mm-ddhh:mmdateyyy-mm-dd00:00:00yyy-mm-ddyyyy-mm3333时区格式-指令属性介绍isAutoTimeZoneTrans视图配置优先,视图配置为false则不转换;视图未配置,元数据字段扩展属性isAutoTimeZoneTrans配置为false则不转换;其他情况需要转换。isShowUTC仅timeStamp类型配置生效,时区是否显示isShowUTCisReadonlyUTC仅timeStamp类型配置生效,时区是否可编辑isReadonlyUTCctrlType格式化类型TimeStamp/Date/Time,配合utcUser中pattern使用isRemoveSeconds仅timeStamp和Time类型配置生效,默认为true,配置是否去除时间格式化中的秒isRemoveDay仅Date类型配置生效,默认为false,配置是否去除日期格式化中的天视图配置字段(field指令)属性解释:3434时区格式-时间日期组件使用•初始化时间组件:•vardateTimePicker_json={•ctrlType:'Date',//格式化类型TimeStamp/Date/Time,必填•showTimeZoneForCtrl:true,//不支持视图配置,默认为true•isShowUTC:true,//是否显示时区,默认显示•isReadonlyUTC:true,//时区是否可编辑,默认为true•readonly:'',//是否只读•validate:'',//校验•isRemoveSeconds:true,//配置是否去除时间格式化中的秒,默认true•isRemoveDay:false,//配置是否去除日期格式化中的天,默认false•format:'',//格式化,默认"YYYY-MM-DD"•value:'',//默认值•}•$('选择器').shrDateTimePicker(dateTimePicker_json);用户自定义时区,设置值的操作:$('选择器').shrDateTimePicker('setUTCCustom');获取用户自定义时区:$('选择器').shrDateTimePicker('getUTCCustom');组件不可用:$('选择器').shrDateTimePicker('disable');组件恢复可用:$('选择器').shrDateTimePicker('enable');取值:$('选择器').shrDateTimePicker('getValue');设置值:$('选择器').shrDateTimePicker('setValue','2021-01-01');3535时区格式-数值组件使用初始化数字组件:varnumberOptions={decimalPrecision:0,//视图配置数值小数位,此配置优先,系统默认2位formatType:"number",id:“xxx”,//元素idignoreDecimalFormatter:false,//忽略数值格式化,显示数据库原始值,系统默认进行格式化roundType:"round",//四舍五入方式,可选择范围roundfloorceil,系统默认为round,标准四舍五入value:"0"//默认值}$('选择器').shrNumberField(numberOptions);组件恢复可用:$('选择器').shrNumberField('enable');组件不可用:$('选择器').shrNumberField('disable');取值:$('选择器').shrNumberField('getValue');设置值:$('选择器').shrNumberField('setValue',123);Thanksterimakasih感謝谢谢ありがとうขอบคุ�ณ版权所有©1993-2019金蝶国际软件集团有限公司①绝密信息严禁泄露