【umi】 国际化,在非组件文件中使用formatMessage

背景

umi提供的国际化函数formatMessage 如果在自己封装的ts文件而非函数组件中使用,如果使用
import { formatMessage } from 'umi';
会报如下警告:

devScripts.js:5035 Warning: Using this API will cause automatic refresh when switching languages, please use useIntl or injectIntl.
使用此 api 会造成切换语言的时候无法自动刷新,请使用 useIntl 或 injectIntl。

但是useIntl 又只能在hook函数式组件中使用。


解决方案: getIntl + getLocale 组合

getIntl中第一个参数是传当前语言环境,如果不传参,会默认使用zh-CN,所以使用getLocale()函数获取一下当前的语言环境

参考:

import { getIntl, getLocale } from 'umi';

// getIntl中第一个参数是传当前语言环境,如果不传参,会默认使用zh-CN,所以使用getLocale函数获取一下当前的语言环境
const { formatMessage } = getIntl(getLocale());

// 此时使用不会报警告,也不会出现语言切换后不刷新问题
formatMessage({ id: 'msg.notOpened' }),

注意:
如果切换语言还是没成功,可以检查在使用umi的切换语言方法setLocale(language) 时,第二个参数要保持默认为true
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值