[intlify] Not found '' key in 'zh' locale messages.

因为我使用的这个key对应的value是一个数组,而普通的key对应的value的值是String却使用

由 vue i18n v9的迁移后的$t()无法获取数组、对象 得到原因,t()在setup是不允许识别出字符串以外的value值,

原来进行转化识别,打开Chome进行代码调试i18n

点开源码查看

function wrapWithDeps(fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) {
        trackReactivityValues(); // track reactive dependency
        // NOTE: experimental !!
        let ret;
        {
            ret = fn(_context);
        }
        if (shared.isNumber(ret) && ret === coreBase.NOT_REOSLVED) {
            const [key, arg2] = argumentParser();
            return __root && _fallbackRoot
                ? fallbackSuccess(__root)
                : fallbackFail(key);
        }
        else if (successCondition(ret)) {
            return ret;
        }
        else {
            /* istanbul ignore next */
            throw createI18nError(14 /* UNEXPECTED_RETURN_TYPE */);
        }
    }
    // t
    function t(...args) {
        return wrapWithDeps(context => coreBase.translate(context, ...args), () => coreBase.parseTranslateArgs(...args), 'translate', root => root.t(...args), key => key, val => shared.isString(val));
    }

点开 coreBase.translate的方法进行查看具体为什么没找到key

 

原因是返回值只接受字符串或者数字,而我们要求的是数组,所以找不到!!!!!

 

查看还要其他全局的方法

const globalExportMethods = ['t', 'rt', 'd', 'n', 'tm'];

t是获取value为字符串

rt为获取value为json的格式的数组

d为获取value为日期的数据

n为获取value为数字的数据
tm为获取value包含所有类型的数据
   function t(...args) {
        return wrapWithDeps(context => coreBase.translate(context, ...args), () => coreBase.parseTranslateArgs(...args), 'translate', root => root.t(...args), key => key, val => shared.isString(val));
    }
    // rt
    function rt(...args) {
        const [arg1, arg2, arg3] = args;
        if (arg3 && !shared.isObject(arg3)) {
            throw createI18nError(15 /* INVALID_ARGUMENT */);
        }
        return t(...[arg1, arg2, shared.assign({ resolvedMessage: true }, arg3 || {})]);
    }
    // d
    function d(...args) {
        return wrapWithDeps(context => coreBase.datetime(context, ...args), () => coreBase.parseDateTimeArgs(...args), 'datetime format', root => root.d(...args), () => coreBase.MISSING_RESOLVE_VALUE, val => shared.isString(val));
    }
    // n
    function n(...args) {
        return wrapWithDeps(context => coreBase.number(context, ...args), () => coreBase.parseNumberArgs(...args), 'number format', root => root.n(...args), () => coreBase.MISSING_RESOLVE_VALUE, val => shared.isString(val));
    }
   // tm
    function tm(key) {
        const messages = resolveMessages(key);
        // prettier-ignore
        return messages != null
            ? messages
            : __root
                ? __root.tm(key) || {}
                : {};
    }
 

 

最后在setup里面引入

 setup(props, ctx) {
    const {t,tm } = useI18n()
    const value=tm('localkey')  //localkey 为具体要查询的key
}

 

posted @ 2023-03-09 16:11  ☆♂安♀★  阅读(2856)  评论(0编辑  收藏  举报