iview 国际化切换时,如何让表单验证文字也跟着切换?

//validate.js
const format = function() {
    if(arguments.length == 0)
        return null;
    let str = arguments[0];
    for(let i = 1; i < arguments.length; i++) {
        let re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
        str = str.replace(re, arguments[i]);
    }
    return str;
}

const validate = {
    min(rule, value, callback) {
        value < rule.min ? callback(new Error(format(rule.msg,rule.min))) : callback();
    },
    max(rule, value, callback) {
        value > rule.max ? callback(new Error(format(rule.msg,rule.max))) : callback();
    },
}


//使用
modify.vue
                name: [{
                        required: true,
                        message: 'The name cannot be empty',
                    },
                    {
                        min: 10,
                        msg: this.$t('validate.min'),
                        validator: validate.min
                    },
                    {
                        max: 100,
                        msg: this.$t('validate.max'),
                        validator: validate.max,
                    },
                ],
使用国际化的时候,都是使用  $t('翻译对象')翻译好再传入,这会导致国际化切换的时候,文字都切换了,但是表单验证里面的check提示还是中文
尝试过先跳转到一个空页面,再跳回来刷新,但是这样非常麻烦,参数query和parmas也比较长

 如何在这个js里面直接翻译回调出去呢?(要放在外部引入,公共验证),或者简单说,**如何让表单里面的check也能跟着语言切换?**
 页面是那种品字型结构,右上角切换语言,里面的子路由页面切换

图片描述

阅读 6.9k
3 个回答

你的想法比较大。不过是实现不了的,因为这些表单上的文字,如:姓名/邮箱/性别等等这些,每个人项目或每个页面都不一样。怎么可能国际化呢!要想这些都翻译过来,就必须根据自己的实际情况去配置。配置方式很多种,JSON格式!其他固定当然是可以翻译了。如日期的1到12月 星期一到星期天等等 这些每个轮子固定的

你把validate相关的data,放置在computed中就可以更新了

新手上路,请多包涵

切换的时候校验都会自动校验,提示语都会显示出来,这个怎么处理呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题