• 国际化规范


    说明

    国际化采用统一的命名规范,开发者在开发具体功能的时候要按照语言 code 定义描述,不能直接写死描述.

    01. 引入多语言工具类

    首先引入 intl 类

    import intl from "utils/intl";
    

    02. 调用多语言方法

    <FormItem label={intl.get("hpfm.event.model.event.code").d("事件编码")}>
      {getFieldDecorator("eventCode")(<Input style={{ width: "150px" }} />)}
    </FormItem>
    

    说明:

    intl.get(code).d(defaultMessage)

    03. CODE 命名规范

    CODE 分为两段

    第一段:

    [服务名].[功能名]

    例如上述例子中: hfpm.event 其中 hpfm 是服务名, event 是功能名

    第二段

    第二段分为 2 种类型:

    模型

    model.[模型名].[字段名]

    例如: model.event.code 是 event 模型的 code 字段

    视图

    view.[类型].[具体类型].[具体含义]

    例如:

    注意:统一按照 [具体类型].[具体含义] 的方式定义

    例如:view.button.save, view.button.submit

    注意:

    内容中如果包含:以及以{开头,比如用引号包裹下

    abc: "测试:冒号"
    cde: "{name} 姓名"
    

    如果内容中包含引号,需要转义

    abc: '引"号'
    

    04. 增加多语言注解

    最后在需要用到多语言的类上增加注解

    import formatterCollections from 'utils/intl/formatterCollections';
    
    @formatterCollections({
      code: ['hpfm.event'], // code 为 [服务].[功能]的字符串数组
    })
    

    其中 code 是对应到上面 服务.功能字符串数组

    05. 常用编码

    平台通用的编码统一在 hzero.common 下,例如 新建,保存等按钮

    可以在“平台多语言” 中按照模块 hzero.common 查询

     rules: [{ required: true, message: intl.get('hzero.common.validation.notNull', {name: intl.get('hpfm.event.model.event.code').d('事件编码')}) }],
    

    hzero.common.validation.notNull 多语言描述是 {name} 不能为空, intl.get() 函数第二个参数是变量的值

    有时候我们会遇到在模块 A 中需要模块 B 的某个多语言描述,这个时候只需要在模块 A 中定义一个多语言引用模块 B 对应的编码即可。

    举例:

    模块 B 中有一个多语言

    hpfm.event.model.event.code = 事件编码
    

    模块 A 中可以定义一个编码

    hpfm.xxxA.model.event.code = ${hpfm.event@model.event.code}
    

    hpfm.event 是模块代码, model.event.code 是具体的代码值

    06. 通用多语言

    通用多语言如下:

    // 普通国际化
    intl.get('hzero.common.button.action').d('操作')
    intl.get('hzero.common.button.viewMore').d('更多查询')
    intl.get('hzero.common.button.collected').d('收起查询')
    intl.get('hzero.common.button.reset').d('重置')
    intl.get('hzero.common.button.search').d('查询')
    intl.get('hzero.common.button.save').d('保存')
    intl.get('hzero.common.button.cancel').d('取消')
    intl.get('hzero.common.button.update').d('修改')
    intl.get('hzero.common.button.add').d('新增')
    intl.get('hzero.common.button.delete').d('删除')
    intl.get('hzero.common.button.edit').d('编辑')
    intl.get('hzero.common.button.create').d('新建')
    intl.get('hzero.common.button.close').d('关闭')
    intl.get('hzero.common.button.next').d('下一步')
    intl.get('hzero.common.button.reload').d('刷新')
    intl.get('hzero.common.button.expand').d('展开')
    intl.get('hzero.common.button.up').d('收起')
    intl.get('hzero.common.button.export').d('导出')
    intl.get('hzero.common.button.clean').d('清除')
    intl.get('hzero.common.button.copy').d('复制')
    intl.get('hzero.common.button.ok').d('确定')
    intl.get('hzero.common.button.pay').d('支付')
    intl.get('hzero.common.button.disable').d('禁用')
    intl.get('hzero.common.button.enable').d('启用')
    intl.get('hzero.common.button.result').d('结果')
    intl.get('hzero.common.button.refresh').d('刷新')
    intl.get('hzero.common.button.download').d('下载')
    intl.get('hzero.common.button.review').d('预览')
    intl.get('hzero.common.button.sure').d('确定')
    intl.get('hzero.common.button.import').d('导入')
    intl.get('hzero.common.button.release').d('发布')
    intl.get('hzero.common.button.preview').d('预览')
    intl.get('hzero.common.button.remove').d('移除')
    intl.get('hzero.common.button.view').d('查看')
    intl.get('hzero.common.button.select').d('选择')
    intl.get('hzero.common.button.trigger').d('执行')
    intl.get('hzero.common.button.pause').d('暂停')
    intl.get('hzero.common.button.resume').d('恢复')
    intl.get('hzero.common.button.upload').d('上传')
    intl.get('hzero.common.button.deploy').d('部署记录')
    intl.get('hzero.common.button.back').d('返回')
    intl.get('hzero.common.button.test').d('测试')
    intl.get('hzero.common.button.setting').d('设置')
    intl.get('hzero.common.button.detail').d('详情')
    intl.get('hzero.common.button.refund').d('退款')
    intl.get('hzero.common.button.refund').d('拒绝')
    intl.get('hzero.common.button.submit').d('提交')
    intl.get('hzero.common.button.collapseAll').d('全部收起')
    intl.get('hzero.common.button.expandAll').d('全部展开')
    intl.get('hzero.common.button.settingLayout').d('设置布局')
    intl.get('hzero.common.button.updatePassword').d('更新密码')
    intl.get('hzero.common.button.addServer').d('添加服务器')
    intl.get('hzero.common.button.addChildren').d('新增下级')
    intl.get('hzero.common.button.republish').d('重新发布')
    intl.get('hzero.common.button.previous').d('上一步')
    intl.get('hzero.common.button.refundReason').d('拒绝原因')
    intl.get('hzero.common.basicLayout.userInfo').d('个人中心')
    intl.get('hzero.common.basicLayout.emptyText').d('您已读完所有消息')
    intl.get('hzero.common.basicLayout.gotoUserMessage').d('进入消息中心')
    intl.get('hzero.common.basicLayout.greetMessage').d('尊敬的用户您好')
    intl.get('hzero.common.basicLayout.accountNoBind').d('系统检测到您的账号尚未绑定')
    intl.get('hzero.common.basicLayout.passwordReset').d('、系统密码为初始密码,')
    intl.get('hzero.common.basicLayout.safeMessage1').d('为保证消息的正常接收及您的账户安全,请前往')
    intl.get('hzero.common.basicLayout.safeMessage2').d('进行修改。')
    intl.get('hzero.common.components.export').d('导出Excel')
    intl.get('hzero.common.components.export.condition').d('设置导出条件')
    intl.get('hzero.common.components.export.columns').d('选择要导出的列')
    intl.get('hzero.common.custom').d('自定义')
    intl.get('hzero.common.currency.ten.thousand').d('万元')
    intl.get('hzero.common.cellphone').d('手机号')
    intl.get('hzero.common.date.active.from').d('有效日期从')
    intl.get('hzero.common.date.active.to').d('有效日期至')
    intl.get('hzero.common.date.creation').d('创建时间')
    intl.get('hzero.common.date.creation.from').d('创建日期从')
    intl.get('hzero.common.date.creation.to').d('创建日期至')
    intl.get('hzero.common.date.release.from').d('发布日期从')
    intl.get('hzero.common.date.release.to').d('发布日期至')
    intl.get('hzero.common.date.register.from').d('注册时间从')
    intl.get('hzero.common.date.register.to').d('注册时间至')
    intl.get('hzero.common.date.register').d('注册时间')
    intl.get('hzero.common.date.releaseTime').d('发布时间')
    intl.get('hzero.common.date.unit.day').d('天')
    intl.get('hzero.common.date.unit.hours').d('小时')
    intl.get('hzero.common.date.unit.minutes').d('分钟')
    intl.get('hzero.common.email').d('邮箱')
    intl.get('hzero.common.globalExcetion.button.backWorkplace').d('返回首页')
    intl.get('hzero.common.gender').d('性别')
    intl.get('hzero.common.interfaceCode').d('接口编码')
    intl.get('hzero.common.interfaceName').d('接口名称')
    intl.get('hzero.common.interfaceUrl').d('接口地址')
    intl.get('hzero.common.jobGroup.auto').d('自动注册')
    intl.get('hzero.common.jobGroup.byHand').d('手动录入')
    intl.get('hzero.common.message.loginOut').d('退出登录')
    intl.get('hzero.common.message.globalError').d('很抱歉!出现预料之外的错误')
    intl.get('hzero.common.message.errorMessage').d('错误信息:')
    intl.get('hzero.common.message.errorLocation').d('错误页面:')
    intl.get('hzero.common.message.confirm.giveUpTip').d('你有修改未保存,是否确认离开?')
    intl.get('hzero.common.message.confirm.title').d('提示框?')
    intl.get('hzero.common.message.confirm.remove').d('确定删除选中数据?')
    intl.get('hzero.common.message.confirm.remove').d('请至少选择一条数据')
    intl.get('hzero.common.message.confirm.delete').d('是否确认删除?')
    intl.get('hzero.common.message.confirm.delete').d('是否删除此条记录')
    intl.get('hzero.common.message.confirm.selected.atLeast').d('请至少选择一行数据')
    intl.get('hzero.common.message.priority.overTime').d('已超时:')
    intl.get('hzero.common.message.priority.remainTime').d('剩余时间:')
    intl.get('hzero.common.message.confirm.refund').d('是否确认退款?')
    intl.get('hzero.common.message.confirm.pay').d('是否确定支付?')
    intl.get('hzero.common.message.confirm.ckEditor').d('请输入富文本内容')
    intl.get('hzero.common.message.confirm.generate').d('是否生成订单?')
    intl.get('hzero.common.model.tenantName').d('租户')
    intl.get('hzero.common.model.common.tenantId').d('租户')
    intl.get('hzero.common.message.confirm.apply').d('是否应用该规则?')
    intl.get('hzero.common.message.dataExists').d('数据已存在')
    intl.get('hzero.common.model.param').d('参数')
    intl.get('hzero.common.message.confirm.stopProcess').d('是否终止此条记录')
    intl.get('hzero.common.message.confirm.suspend').d('是否挂起此条记录')
    intl.get('hzero.common.notification.export.error').d('导出异常')
    intl.get('hzero.common.notification.success.save').d('保存成功')
    intl.get('hzero.common.notification.error.webSocket').d('webSocket连接失败!')
    intl.get('hzero.common.notification.error').d('操作失败')
    intl.get('hzero.common.notification.typeError').d('网络请求异常')
    intl.get('hzero.common.notification.typeError.description').d('请稍后重试')
    intl.get('hzero.common.notification.success.create').d('创建成功')
    intl.get('hzero.common.notification.download.error').d('下载异常')
    intl.get('hzero.common.notification.success.delete').d('删除成功')
    intl.get('hzero.common.priority.low').d('低')
    intl.get('hzero.common.priority.high').d('高')
    intl.get('hzero.common.priority.medium').d('中')
    intl.get('hzero.common.phone').d('手机')
    intl.get('hzero.common.publishUrl').d('发布地址')
    intl.get('hzero.common.predefined').d('预定义')
    intl.get('hzero.common.priority').d('优先级')
    intl.get('hzero.common.process.readFlagY').d('已读')
    intl.get('hzero.common.process.readFlagN').d('未读')
    intl.get('hzero.common.richTextEditor.insertFile').d('插入文件')
    intl.get('hzero.common.richTextEditor.insertImage').d('插入文件')
    intl.get('hzero.common.richTextEditor.selectFile').d('选择图片')
    intl.get('hzero.common.richTextEditor.uploading').d('正在上传')
    intl.get('hzero.common.richTextEditor.startUpload').d('开始上传')
    intl.get('hzero.common.releaseType').d('发布类型')
    intl.get('hzero.common.remark').d('备注')
    intl.get('hzero.common.status.edit').d('编辑')
    intl.get('hzero.common.status.cancel').d('取消')
    intl.get('hzero.common.status.enable').d('启用')
    intl.get('hzero.common.status').d('状态')
    intl.get('hzero.common.status.normal').d('正常')
    intl.get('hzero.common.status.abnormal').d('故障')
    intl.get('hzero.common.status.unmonitor').d('未在监控')
    intl.get('hzero.common.status.finished').d('已结束')
    intl.get('hzero.common.status.suspended').d('挂起中')
    intl.get('hzero.common.status.running').d('运行中')
    intl.get('hzero.common.status.read').d('已读')
    intl.get('hzero.common.status.unread').d('未读')
    intl.get('hzero.common.status.agree').d('同意')
    intl.get('hzero.common.status.reject').d('拒绝')
    intl.get('hzero.common.status.addSign').d('加签')
    intl.get('hzero.common.status.ApproveAndAddSign').d('同意并加签')
    intl.get('hzero.common.status.delegate').d('转交')
    intl.get('hzero.common.status.jump').d('驳回')
    intl.get('hzero.common.status.recall').d('撤回')
    intl.get('hzero.common.status.revoke').d('撤销')
    intl.get('hzero.common.status.autoDelegate').d('自动转交')
    intl.get('hzero.common.status.carbonCopy').d('抄送')
    intl.get('hzero.common.status.reset').d('重置')
    intl.get('hzero.common.status.search').d('查询')
    intl.get('hzero.common.status.no').d('否')
    intl.get('hzero.common.status.yes').d('是')
    intl.get('hzero.common.status.disable').d('禁用')
    intl.get('hzero.common.status.enabledFlag').d('状态')
    intl.get('hzero.common.status.enableFlag').d('是否启用')
    intl.get('hzero.common.status.delete').d('删除')
    intl.get('hzero.common.status.create').d('新建')
    intl.get('hzero.common.source').d('来源')
    intl.get('hzero.common.status.requiredFlag').d('是否必输')
    intl.get('hzero.common.status.ip').d('IP')
    intl.get('hzero.common.status.port').d('端口')
    intl.get('hzero.common.status.loginUser').d('登录用户名')
    intl.get('hzero.common.status.loginEncPwd').d('登录密码')
    intl.get('hzero.common.table.column.option').d('操作')
    intl.get('hzero.common.title.userInfo').d('个人中心')
    intl.get('hzero.common.title.userInfo').d('__hzero-common-title__')
    intl.get('hzero.common.title.userMessage').d('站内消息')
    intl.get('hzero.common.table.column.option').d('更多')
    intl.get('hzero.common.title.wordEdit').d('__hzero-common-title__')
    intl.get('hzero.common.title.content').d('必须先选择上传类型')
    intl.get('hzero.common.time.creation.from').d('创建日期从')
    intl.get('hzero.common.time.creation.to').d('创建日期至')
    intl.get('hzero.common.title.batchImport').d('批量导入')
    intl.get('hzero.common.title.individuation.formInputPropsSize').d('控件大小')
    intl.get('hzero.common.title.individuation.formInputPropsTypeCase').d('组件的大小写输入限制')
    intl.get('hzero.common.title.individuation.formInputPropsDbc2sbc').d('是否转换全角到半角')
    intl.get('hzero.common.title.individuation.formInputPropsTrim').d('是否删除前后空格')
    intl.get('hzero.common.title.individuation.formInputPropsTrimAll').d('是否删除所有空格')
    intl.get('hzero.common.title.individuation.formInputPropsMax').d('最大值')
    intl.get('hzero.common.title.individuation.formInputPropsMin').d('最小值')
    intl.get('hzero.common.title.individuation.formInputPropsPrecision').d('数值精度')
    intl.get('hzero.common.title.individuation.allowThousandth').d('是否启用千分位')
    intl.get('hzero.common.title.individuation.required').d('是否必输')
    intl.get('hzero.common.title.individuation.formInputPropsDisabled').d('是否不可编辑')
    intl.get('hzero.common.title.individuation.row').d('字段行')
    intl.get('hzero.common.title.individuation.row').d('字段列')
    intl.get('hzero.common.title.formula').d('公式')
    intl.get('hzero.common.upload.error.type.null').d('上传文件类型缺失,请检查类型')
    intl.get('hzero.common.upload.status.error').d('上传失败')
    intl.get('hzero.common.upload.txt').d('上传')
    intl.get('hzero.common.upload.view').d('查看附件')
    intl.get('hzero.common.upload.text').d('上传附件')
    intl.get('hzero.common.upload.modal.title').d('附件')
    intl.get('hzero.common.upload.template').d('附件模板')
    intl.get('hzero.common.validation.atLeast').d('请至少选择一条数据')
    intl.get('hzero.common.validation.ip').d('ip地址不正确')
    intl.get('hzero.common.validation.email').d('邮箱格式不正确')
    intl.get('hzero.common.validation.phone').d('手机格式不正确')
    intl.get('hzero.common.validation.notChange').d('未更改')
    intl.get('hzero.common.validation.httpUrl').d('请输入以“http/https”开头的正确网址')
    intl.get('hzero.common.validation.codeUpper').d('全大写及数字,必须以字母、数字开头,可包含“-”、“_”、“.”、“/”')
    intl.get('hzero.common.validation.code').d('大小写及数字,必须以字母、数字开头,可包含“-”、“_”、“.”、“/”')
    intl.get('hzero.common.validation.password').d('至少包含数字/字母/字符2种组合,长度为6-30个字符')
    intl.get('hzero.common.validation.codeLower').d('全小写及数字,必须以字母、数字开头,可包含“-”、“_”、“.”、“/”')
    
    // 模板国际化
    intl.get('hzero.common.validation.max').d('长度不能超过{max}个字符')
    intl.get('hzero.common.upload.support').d('上传格式:{type}')
    intl.get('hzero.common.validation.notNull').d('{name}不能为空')
    intl.get('hzero.common.upload.error.size').d('上传文件大小不能超过:{fileSize}')
    intl.get('hzero.common.upload.error.type').d('上传文件类型必须是:{fileType}')
    

    07. 注意事项

    界面多语言除了采用统一的命名规范以外,还需要注意以下几点:

    举例:

    const messageCode = 'hpfm.message.model.message';
    
    intl.get(`${messageCode}.code`).d('消息编码')
    

    上面这种国际化的书写是不规范的,应写成如下形式:

    intl.get('hpfm.message.model.message.code').d('消息编码')
    

    注意: 多语言编码中出现字符串/变量拼接是不推荐使用的,如果一定要使用这种方法,请勿在多个文件中传递使用

    错误示例:

    // bad
    intl.get('hwfp.interfaceDefinition.model.interfaceDefinition.description').d('接口说明')
    

    像上面这种键值过长的国际化编码,我们一般会采用简写的形式来书写(例如:description可以简写为desc)

    举例:

     rules:[
        {
            required: true,
            message: intl.get('hzero.common.validation.notNull',
            {name: intl.get('hpfm.event.model.event.code').d('事件编码')})
        }
    ],
    

    hzero.common.validation.notNull 多语言描述是 {name} 不能为空, intl.get() 函数第二个参数是变量的值