(Gatsby) 在每个文档的基础上从 `SEO.defaultProps` 分离的最简单方法?
(Gatsby) Easiest way to diverge from the `SEO.defaultProps` on a per-document basis?
我网站上的大部分页面都是挪威语—
Seo.defaultProps = {
lang: `no`,
...
}
不过,有些文章是英文的。
我在我的网站上使用了一些自动 CSS 断字。因此,我需要在这些文档的 head
中将 HTML lang
设置为英文,以便单词正确中断。
我对构建全面的多语言站点不感兴趣。我只想能够在每个文档的基础上偏离默认语言 属性。
最简单的方法是什么?我需要更改我的 gatsby-node.js
文件吗?或者我可以将我的 template.js
文件设置为在每个 MDX 文件中请求 lang
吗?或者我可以在我希望更改的文章中插入一个 seo-english.js
组件吗?
我认为最简单的方法是将使用上下文 (pageContext
) 编写的语言传递给每篇文章。
在您的 createPage
函数中:
createPage({
path: node.slug,
component: blogPostTemplate,
context: {
lang: node?.lang ?? 'en',
},
})
在你的blogPostTemplate
中:
function BlogTemplate({ pageContext }) {
const { lang } = pageContext
return (
<div>
Language is: {lang}
</div>
)
}
我认为这是最直接的解决方案,因为您已经循环遍历所有文章以创建所有页面,因此您正在利用循环来获取每种特定语言的数据。那么,你只需要把它收集起来即可。
该方法与在每个特定 MDX 文件中添加语言并在模板中获取它非常相似,它不会改变解决方法。最后,您需要以某种方式将它添加到 MDX 文件中。如果它不存在,它将使用 en
作为后备 (node?.lang ?? 'en'
)。
使用其中一种方法,您仍然可以相应地在 SEO 组件或其他组件上呈现。
我发现在那些我希望与默认道具不同的帖子中使用 Helmet
最简单。
<Helmet
htmlAttributes={{
lang: 'en'
}}
/>
我网站上的大部分页面都是挪威语—
Seo.defaultProps = {
lang: `no`,
...
}
不过,有些文章是英文的。
我在我的网站上使用了一些自动 CSS 断字。因此,我需要在这些文档的 head
中将 HTML lang
设置为英文,以便单词正确中断。
我对构建全面的多语言站点不感兴趣。我只想能够在每个文档的基础上偏离默认语言 属性。
最简单的方法是什么?我需要更改我的 gatsby-node.js
文件吗?或者我可以将我的 template.js
文件设置为在每个 MDX 文件中请求 lang
吗?或者我可以在我希望更改的文章中插入一个 seo-english.js
组件吗?
我认为最简单的方法是将使用上下文 (pageContext
) 编写的语言传递给每篇文章。
在您的 createPage
函数中:
createPage({
path: node.slug,
component: blogPostTemplate,
context: {
lang: node?.lang ?? 'en',
},
})
在你的blogPostTemplate
中:
function BlogTemplate({ pageContext }) {
const { lang } = pageContext
return (
<div>
Language is: {lang}
</div>
)
}
我认为这是最直接的解决方案,因为您已经循环遍历所有文章以创建所有页面,因此您正在利用循环来获取每种特定语言的数据。那么,你只需要把它收集起来即可。
该方法与在每个特定 MDX 文件中添加语言并在模板中获取它非常相似,它不会改变解决方法。最后,您需要以某种方式将它添加到 MDX 文件中。如果它不存在,它将使用 en
作为后备 (node?.lang ?? 'en'
)。
使用其中一种方法,您仍然可以相应地在 SEO 组件或其他组件上呈现。
我发现在那些我希望与默认道具不同的帖子中使用 Helmet
最简单。
<Helmet
htmlAttributes={{
lang: 'en'
}}
/>