在 react-bootstrap select 输入中显示选择的 i18next 语言
Show chosen i18next language in react-bootstrap select input
import React from 'react';
import i18n from "i18next";
import { withTranslation, WithTranslation } from 'react-i18next';
import {Form} from 'react-bootstrap';
interface State {
language: string;
}
interface Props extends WithTranslation {}
class LanguageSwitcher extends React.Component<WithTranslation, State, Props> {
constructor(props: Props) {
super(props);
this.state = {
language: 'en'
};
}
changeLang = async (event: any) => {
i18n.changeLanguage(event.target.value);
this.setState({...this.state, language: event.target.value});
await new Promise(r => setTimeout(r, 200));
}
render() {
const { t, i18n } = this.props;
const getCurrentLng = () => i18n.language || window.localStorage.i18nextLng || '';
return (
<div className="tmf-language-switcher">
<Form>
<Form.Group controlId="form-language">
<Form.Label>{t('language')}</Form.Label>
<Form.Control value={this.state.value} as="select" onChange={this.changeLang.bind(this)} ref="valid_for">
<option value="en">{t('English')}</option>
<option value="de">{t('German')}</option>
</Form.Control>
</Form.Group>
</Form>
</div>
);
}
}
export default withTranslation()(LanguageSwitcher);
我正在使用 react-i18next 和 react-bootstrap 来实现语言切换器。
上面的代码有效,我可以切换语言,但是如果我改变路线再回来,控制选项中没有选择当前语言。
有人能告诉我,如何显示正确的语言默认值吗?
我通过将 getCurrentLng()
作为 value
传递给我的 Form.Control
:
解决了这个问题
<Form.Control value={getCurrentLng()} as="select" onChange={this.changeLang.bind(this)}>
import React from 'react';
import i18n from "i18next";
import { withTranslation, WithTranslation } from 'react-i18next';
import {Form} from 'react-bootstrap';
interface State {
language: string;
}
interface Props extends WithTranslation {}
class LanguageSwitcher extends React.Component<WithTranslation, State, Props> {
constructor(props: Props) {
super(props);
this.state = {
language: 'en'
};
}
changeLang = async (event: any) => {
i18n.changeLanguage(event.target.value);
this.setState({...this.state, language: event.target.value});
await new Promise(r => setTimeout(r, 200));
}
render() {
const { t, i18n } = this.props;
const getCurrentLng = () => i18n.language || window.localStorage.i18nextLng || '';
return (
<div className="tmf-language-switcher">
<Form>
<Form.Group controlId="form-language">
<Form.Label>{t('language')}</Form.Label>
<Form.Control value={this.state.value} as="select" onChange={this.changeLang.bind(this)} ref="valid_for">
<option value="en">{t('English')}</option>
<option value="de">{t('German')}</option>
</Form.Control>
</Form.Group>
</Form>
</div>
);
}
}
export default withTranslation()(LanguageSwitcher);
我正在使用 react-i18next 和 react-bootstrap 来实现语言切换器。
上面的代码有效,我可以切换语言,但是如果我改变路线再回来,控制选项中没有选择当前语言。
有人能告诉我,如何显示正确的语言默认值吗?
我通过将 getCurrentLng()
作为 value
传递给我的 Form.Control
:
<Form.Control value={getCurrentLng()} as="select" onChange={this.changeLang.bind(this)}>