gpt4 book ai didi

reactjs - 静态生成的 Next.js 页面中的动态 HTML lang 属性

转载 作者:行者123 更新时间:2023-12-04 12:35:30 24 4
gpt4 key购买 nike

我正在 Next.Js 项目中处理多语言静态登录页面。
我的目标是具有以下结构:

  • /-> 中文首页
  • /de -> 德语首页
  • /it -> 意大利语首页

  • 我正在通过以下方式构建它:

    页面/index.js
    export default function Home() {
    return <div>English Homepage</div>
    }

    页/de.js
    export default function Home() {
    return <div>German page</div>
    }

    为了使网站可访问,我想相应地设置 html lang。

    页面/_document.js
    class MyDocument extends Document {
    static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx)
    return { ...initialProps }
    }

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

    如何指定每页的语言?
    我试过 getInitialProps ,但这会迫使我的网站成为 SSR。

    最佳答案

    您确实正确使用 getInitialProps . 不像 getInitialProps在将禁用自动静态优化的普通页面中,getInitialProps_document.js没有这种效果。

    这是因为Document仅在服务器中呈现。 DocumentgetInitialProps函数不会在客户端转换期间调用,也不会在页面静态优化时调用。 More about its technical details

    这就是为什么你可以用它来注入(inject) lang prop 进入页面并仍然获得静态优化的好处。

    // _document.js
    ...
    static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    const { pathname } = ctx;
    const lang = pathname.startsWith("/de") ? "de" : "en";
    return { ...initialProps, lang };
    }
    ...

    拥有 lang属性也在客户端转换期间更新,您还必须设置 useRouter Hook _app.js观看路线变化:
    // _app.js
    import React, { useEffect } from "react";
    import { useRouter } from "next/router";

    export default function MyApp({ Component, pageProps }) {
    const { pathname } = useRouter();
    const lang = pathname.startsWith("/de") ? "de" : "en";
    useEffect(() => {
    document.documentElement.lang = lang;
    }, [lang]);

    return <Component {...pageProps} />;
    }

    我已经为您创建了这个 CodeSandbox 作为演示。

    Edit dynamic-html-lang-property-in-statically-generated-next-js-pages

    将其下载到本地机器并检查代码。后 npm install , 运行 npm run build .您将从构建日志中看到“/”和“de”都是静态的。运行 npm start查看页面源码,会看到 lang属性在 HTML 中正确设置。

    关于reactjs - 静态生成的 Next.js 页面中的动态 HTML lang 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62297280/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com