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

新手上路,请多包涵

我有一个多语言站点,需要根据每个页面的语言设置 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>
  )
}

}

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

原文由 MiguelSlv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

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

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

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

原文由 MiguelSlv 发布,翻译遵循 CC BY-SA 4.0 许可协议

我相信这里最好的解决方案是使用自定义 ./pages/_document.js 文件并覆盖文档本身。

 import Document, { Html, Head, Main, NextScript } from 'next/document'

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx)
    return { ...initialProps }
  }

  render() {
    return (
      <Html lang="en">
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    )
  }
}

export default MyDocument

更多解释可以在这里找到: https ://nextjs.org/docs/advanced-features/custom-document

原文由 Joel Varty 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题