【问题标题】:button to switch i18n language切换i18n语言的按钮
【发布时间】:2026-02-23 12:40:01
【问题描述】:

我的代码在 react 中并使用 i18next 库。这之前是使用材料 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,但它们似乎都没有给我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>

谢谢!

【问题讨论】:

    标签: javascript reactjs button i18next


    【解决方案1】:

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

    类似

    <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

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

    【讨论】:

    • 感谢您的回答!该示例效果很好,但是您建议的代码不适用于我的项目。我不确定 i18next 语言是否呈现为 DOM 元素,因为 myFunction 没有被调用
    • @cookiestarninja 好吧,i18next 可以处理需要根据特定语言更改或呈现的标签,您可以做的只是调用方法来更改或触发语言更改,即 i18n.changeLanugae('')。试试吧,它会起作用的。
    • 天哪,我应该选择 i18n.changeLanguage 哈哈。这行得通,谢谢!