如何在Next.js中在文档组件中获取区域设置?

huangapple go评论58阅读模式
英文:

How to get locale in nextjs in document component?

问题

我想在脚本中设置谷歌地图的区域设置,就像这样:

<script defer src={`https://maps.googleapis.com/maps/api/js?key=key&amp;libraries=places&amp;language=${locale}`}/>

但是如何在 NextJS 的 Document 中获取区域设置呢?
在 Document 组件中,useRouter 不起作用。

export default function Document() {
  return (
    <Html>
      <Head>
        <link rel="preconnect" href="https://fonts.googleapis.com" />
        <script defer src={`https://maps.googleapis.com/maps/api/js?key=key&amp;libraries=places&amp;language=${locale}`}/>
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}
英文:

I want to set the locale in the script google map like this:

&lt;script defer src={`https://maps.googleapis.com/maps/api/js?key=key&amp;libraries=places&amp;language=${locale}`}/&gt;

but how can I get to the locale in Document nextJS?
useRouter does not work in the Document component.

export default function Document() {
  return (
    &lt;Html&gt;
      &lt;Head&gt;
        &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot; /&gt;
       
      
&lt;script defer src={`https://maps.googleapis.com/maps/api/js?key=key&amp;libraries=places&amp;language=${locale}`}/&gt; 
      &lt;/Head&gt;

      &lt;body&gt;
        &lt;Main /&gt;
        &lt;NextScript /&gt;
      &lt;/body&gt;
    &lt;/Html&gt;
  );
}

答案1

得分: 3

你可以通过this.props.locale来访问区域设置。

在我的项目中,在这种情况下使用这个区域设置:

<Html lang={this.props.locale}>
//....

我在_document中使用类组件。

在你的情况下,你只能通过props来访问区域设置。

import { Html, Head, Main, NextScript } from "next/document";

export default function Document(props: DocumentProps) {
  return (
    <Html lang={props.locale}>
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

如果你已经添加了i18n配置并将其注入到next配置中,它就会起作用。

你可以在这个链接中查看示例:https://codesandbox.io/p/sandbox/musing-noether-7loye1?file=%2Fpages%2F_document.tsx&selection=%5B%7B%22endColumn%22%3A9%2C%22endLineNumber%22%3A11%2C%22startColumn%22%3A9%2C%22startLineNumber%22%3A11%7D%5D

英文:

You can access locale in this.props.locale.

In my project this locale uses in this case:

 &lt;Html lang={this.props.locale}&gt;
/....

I use class component in _document.

In your variant you can access locale just in props.

import { Html, Head, Main, NextScript } from &quot;next/document&quot;;

export default function Document(props: DocumentProps) {
  return (
    &lt;Html lang={props.locale}&gt;
      &lt;Head /&gt;
      &lt;body&gt;
        &lt;Main /&gt;
        &lt;NextScript /&gt;
      &lt;/body&gt;
    &lt;/Html&gt;
  );
}

It works if you already add i18n config, and inject it to next config.

https://codesandbox.io/p/sandbox/musing-noether-7loye1?file=%2Fpages%2F_document.tsx&amp;selection=%5B%7B%22endColumn%22%3A9%2C%22endLineNumber%22%3A11%2C%22startColumn%22%3A9%2C%22startLineNumber%22%3A11%7D%5D

huangapple
  • 本文由 发表于 2023年2月16日 19:27:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/75471606.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定