0

在我的应用程序中,我通过单击按钮来更改语言。现在我想根据该语言的大写规则更改一些单词并将其变为大写。我试图通过<html/>动态更改 lang 属性来做到这一点。我的语言选项是土耳其语和英语

要更改 html 标签,我使用react-helmet并翻译我使用react-i18next的单词。它似乎适用于某些代码,但对于某些单词,大写规则适用于以前的语言。

<Helmet htmlAttributes={{lang: currentlySelectedLanguage}} /> 
function getHeader(){
   return[
     { id: headerOne, label: t("kit")}
   ]

}

t 是 的翻译函数react-i18n。该函数检查 currentSelectedLanguage 的翻译 json 文件并将其值写入标签。

标题项text-transform:uppercase在其 css 类中。

在土耳其语中,有两种类型的字母:i -> İ 和 ı -> I。

当我选择english时,会发生,但不是写KIT,而是得到KİT。这是土耳其语的大写规则,而不是英语。

当我选择turkish时,发生但我得到KIT,但它应该是KİT,这也是英语的大写规则

4

1 回答 1

0

我有一个类似的问题。使用当前语言设置React Helmet (如您的htmlAttributes声明中所示),

<Helmet htmlAttributes={{ lang: currentlySelectedLanguage }} />

不影响 DOM 中具有text-transform: uppercase;CSS 声明的元素(按钮、标题等)。

我通过document.documentElement.lang在触发的设置语言动作开始时立即设置来解决它:

    setLanguage(currentlySelectedLanguage) {
        if (document.documentElement) {
            document.documentElement.lang = currentlySelectedLanguage
        }

        // do other stuff ...
    }

设置<html lang="??">这种方式来解决问题并不会阻止我使用 React Helmet,我继续使用 React Helmet 管理对文档头的所有更改。

于 2019-09-13T20:33:59.300 回答