切换 i18n 语言的按钮

button to switch i18n language

我的代码在反应中并使用 i18next 库。这是以前用 material ui 的 Select API 完成的,我可以使用 valueonChangeinputProps 个参数。但是,此设计已更改为两个单独的按钮(例如 'en' 和 'zh'),而不是开关。这是使用 Select API(语言切换 = 下拉菜单)在两种语言之间成功切换的代码:

const LanguageMenu = () => {
    const { t, i18n } = useTranslation()
    const classes = useStyles()

    const [values, setValues] = useState({
        language: i18next.language
    })

    function handleChange(event) {
        i18n.changeLanguage(event.target.value)

        setValues(oldValues => ({
            ...oldValues,
            [event.target.name]: event.target.value,
        }))
    }

    return(
        <>
            <Select
    value={values.language}
    onChange={(event) => handleChange(event)}
    disableUnderline
    inputProps={{
        name: 'language'
    }}
    classes={{
        select: classes.selectFocus
    }}
>
        

<MenuItem value={'en'}><p role="img" aria-label="en"></p></MenuItem>
<MenuItem value={'zh-Hant'}><p role="img" aria-label="zh"></p></MenuItem>
</Select>
        </>
    )
}

我看过 ButtonGroup API 和 Button API 和 none 似乎给了我参数 Select API 个报价。我正在考虑在 HTML 中使用本机 button,但我仍然需要在调用 value={'en'}value={'zh-Hant'} 之前传入 values.language 上下文,我'我不确定我怎样才能做到这一点。我也试过下面的代码,它不起作用:

<button onChange={(e) => handleChange(e)}>En</button>
<button onChange={(e) => handleChange(e)}>Zh</button>

谢谢!

你可以给你的按钮一些属性,你可以在这些属性的帮助下访问它们。

类似

<button id="EN" value="EN" name="EN" onChange={(event) => handleChange(event)}>En</button>
<button id="ZH" value="ZH" name="ZH" onChange={(event) => handleChange(event)}>Zh</button>

在你的 handleChange 函数中你可以通过 ID 获取元素。

function handleChange(e:any){
    var x = document.getElementById(e.target.id).value;
    //Use x in your code as per requirement

// x will have the value of your button you canget whatever you want value,name etc
}

我也给你做了例子,你可以看看参考。

https://www.w3schools.com/code/tryit.asp?filename=GRZ6X9IAGG39

希望这能解决您的问题。让我知道它是否有效。