当前位置: 首页 > 工具软件 > React Intl > 使用案例 >

react国际化 react-intl

费星晖
2023-12-01

首先 下载导入插件 react-intl

npm install react-intl@2 -S

注意: 在这里说下,网上搜了很多都没说下载2.x版本的,现在下载的是3.x的版本,结果被这个版本坑了好久,各种报错,大家下载的时候注意了

我是在路由页面开始的,用法跟redux差不多,需要用 IntlProvider 组件把根组件包裹起来

// IndexLayout.js
import {addLocaleData, IntlProvider} from 'react-intl';
import en from 'react-intl/locale-data/en';
import zh from 'react-intl/locale-data/zh';
import zh_CN from "@/locale/zh_CN";   //这个是本地自己建的语言文件
import en_US from "@/locale/en_US";   //这个是本地自己建的语言文件

addLocaleData([...en, ...zh]);  // 引入多语言环境的数据


render() {
        let messages = {};
        messages['en'] = en_US;
        messages['zh'] = zh_CN;
        // 这里可以用组件的state,也可以用redux全局的,这里因为我是在其他组件里改变的,所以用的redux来控制
        const language = this.props.public.language;
        return (
            <IntlProvider locale={language} messages={messages[language]}>
                <div className="section">
                    <Header/>
                    <Switch>
                        <Route path="/app/home" component={Home}/>
                        <Route path="/app/about" component={About}/>
                        <Route path="/app/culture" component={Culture}/>
                        <Route path="/app/join" component={Join}/>
                        <Route path="/app/find" component={Find}/>
                        <Route render={() => (<Redirect to="/app/home"/>)}/>
                        <Route component={Home}/>
                    </Switch>
                    <Footer/>
                </div>
            </IntlProvider>
        )
    }

分别创建想要的语言文件

//  zh_CN.js
const zh_CN = {
    home:"首页"
};

export default zh_CN;


// en_US .js
const en_US = {
    home: 'HOME',
};

export default en_US;

配置最后一步挂在到跟根元素上面去

import IndexLayout from "./views";

const hotRender = Component => {
    render(
        <Provider store={store}>
            <Component/>
        </Provider>,
        rootElement
    )
};

hotRender(IndexLayout);

到这里配置就算完成了!

最后 就是使用了

import {FormattedMessage} from 'react-intl';

export Home extends Component{
	render(){
		return(
			<div>
				//  用这个组件代替想要语言切换的内容,下面这个组件英文状态就显示为HOME,中文状态就显示首页
				<FormattedMessage id="home"/>
			</div>
		)
	}
}
 类似资料: