如何在NextJs文档上动态设置HTML lang属性?

问题描述 投票:1回答:2

我有一个多语言站点,需要根据每个页面的语言设置HTML lang属性。

我尝试在上下文中传递值,但是在页面更改时不会更新。

这里是当前代码:

import Document, { Html, Head, Main, NextScript } from 'next/document'
import GlobalContext , {eLanguage }from '../components/GlobalContext' //my global context 

export default class MyDocument extends Document {

static async getInitialProps(ctx) {

  const initialProps = await Document.getInitialProps(ctx)
  return { ...initialProps }
}
static contextType = GlobalContext;
render() {

  console.debug('Started')
  console.debug('language:'+ this.context.language) 

  return (
    <Html lang={eLanguage[this.context.language]}> //if the first page loaded as lang 'en' it sets 'en' and apply to all other pages.
      <Head>
      </Head>
      <body>       
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

}

更新:每个页面的语言可以从页面路由中推断出来

html node.js reactjs next.js
2个回答
1
投票

如果使用next/head,则可以将语言设置为html标签。传递给Head组件的所有内容都将放在或中。

Next Head的工作原理类似于React Helmet,因此您可以按照以下方式进行操作:

  • 创建一个组件并从“ next / head”导入Head
  • 在Head标签内,将添加到组件。

然后您可以将所需的语言传递给该组件,然后将该组件导入所需的页面。

import React from "react"
import Head from "next/head"

const Language = ({title, lang}) => (
  <Head>
    <html lang={lang} />
    <title>{title}</title>
  </Head>
)

export default Language

该html位将注入到标签内。

注意,即使我们这样注入,控制台也会记录以下错误:TypeError: n is null


0
投票

使用文档对象的lang属性可以这样设置:

var language= ...
switch (language) {
    case en:  document.documentElement.lang = 'en-us'; break;
    ...
}

在页面水合之前,不会在初始html上设置此lang属性,但仍会通过chrome“ hreflang”审核检查。

© www.soinside.com 2019 - 2024. All rights reserved.