ice
ice copied to clipboard
build-plugin-ice-i18n 如何配置使切换语言时不刷新页面?
What is the current behavior? 发生了什么?
import { useLocale } from 'ice'; const [, setLocale] = useLocale(); 使用setLocale切换语言时,会刷新页面。
What is the expected behavior? 期望的结果是什么?
使用setLocale切换语言时,不需要刷新页面即可预览多语言效果。
Any additional comments? 相关环境信息?
- ice.js Version:^2.0.0
- build.json Configuration:
"plugins": [ [ "build-plugin-moment-locales", { "locales": ["zh-cn"] } ], [ "build-plugin-ice-i18n", { "locales": ["en-US", "zh-CN", "de"], "defaultLocale": "en-US" } ] ]
- Node Version:
- Platform: windows 10 x64
现在没有刷新页面的吧。可以方便发一个可复现的最小 demo 么
好的,我看看弄个demo
引入ConfigProvider切换语言就会刷新页面,注释掉就不会
import * as React from 'react';
import { IntlProvider } from 'react-intl';
import { ConfigProvider } from '@alifd/next';
// 引入基础组件的语言包
import enUS from '@alifd/next/lib/locale/en-us';
import zhCN from '@alifd/next/lib/locale/zh-cn';
// 引入 locale 配置文件
import localeEnUS from '@/locales/en-US';
import localeZhCN from '@/locales/zh-CN';
import { getDefaultLocale, useLocale } from 'ice';
// 设置语言包
// addLocaleData([...en, ...zh]);
const localeInfo = {
'zh-CN': {
nextLocale: zhCN,
appLocale: 'zh',
appMessages: localeZhCN,
},
'en-US': {
nextLocale: enUS,
appLocale: 'en',
appMessages: localeEnUS,
},
};
interface Props {
children: React.ReactNode;
}
function LocaleProvider(props: Props) {
const { children } = props;
const [locale] = useLocale();
const defaultLocale = getDefaultLocale();
const myLocale = localeInfo[locale]
? localeInfo[locale]
: localeInfo[defaultLocale];
return (
<IntlProvider locale={myLocale.appLocale} messages={myLocale.appMessages} defaultLocale={defaultLocale}>
{/** 引入ConfigProvider切换语言就会刷新页面,注释掉就不会 */}
<ConfigProvider locale={myLocale.nextLocale}>
{React.Children.only(children)}
</ConfigProvider>
</IntlProvider>
);
}
export default LocaleProvider;
ConfigProvider 只会让组件 rerender,不会刷新整个页面
可以确认下是刷新还是重新渲染,如果还有问题可以提供复现 demo