在使用 umi 创建的 antd-pro 项目中,在 GlobalHeader 组件中的 AvatarDropdown 组件在多语言切换时未进行语言的切换,刷新后则显示正常。
create-umi 进行项目搭建;$ yarn 进行依赖安装;BasicLayout 布局页面;AvatarDropdown 下拉,切换多语言后,再次查看 AvatarDropdown 下拉,发现并未按所选语言进行切换;
在进行多语言切换时, AvatarDropdown 组件下拉项可以准确实时地进行语言的切换。
onMenuClick = (event: ClickParam) => {
const { key } = event;
if (key === 'logout') {
removeToken()
router.push('/user/login')
return;
}
router.push(`/account/${key}`);
};
render(): React.ReactNode {
const { currentUser = { avatar: '', name: '' }, menu } = this.props;
console.log(currentUser)
const menuHeaderDropdown = (
<Menu className={styles.menu} selectedKeys={[]} onClick={this.onMenuClick}>
{menu && (
<Menu.Item key="center">
<Icon type="user" />
<FormattedMessage id="menu.account.center" defaultMessage="account center" />
</Menu.Item>
)}
{menu && (
<Menu.Item key="settings">
<Icon type="setting" />
<FormattedMessage id="menu.account.settings" defaultMessage="account settings" />
</Menu.Item>
)}
{menu && <Menu.Divider />}
<Menu.Item key="logout">
<Icon type="logout" />
<FormattedMessage id="menu.account.logout" defaultMessage="logout" />
</Menu.Item>
</Menu>
);
return currentUser && currentUser.name ? (
<HeaderDropdown overlay={menuHeaderDropdown}>
<span className={`${styles.action} ${styles.account}`}>
<Avatar size="small" className={styles.avatar} src={currentUser.avatar} alt="avatar" />
<span className={styles.name}>{currentUser.name}</span>
</span>
</HeaderDropdown>
) : (
<Spin size="small" style={{ marginLeft: 8, marginRight: 8 }} />
);
}
初始状态:


切换语言后:


这个也是万人坑了, @chenshuai2144 来整理一下 FAQ 解决方案。
遇到同样问题,调用setLocale(lang,false); 第二个参数不刷新页面,页面语言只是部分切换,没有全部切换语言。虽然页面页面不刷新的效果是有的。
Most helpful comment
这个也是万人坑了, @chenshuai2144 来整理一下 FAQ 解决方案。