Я создаю локализованный статический веб-сайт, используя Gatsby, с помощью gatsby-plugin-intl
.Этот плагин добавляет контекстную переменную с именем intl
к страницам (включая страницы на основе шаблона), которая является объектом: https://github.com/wiziple/gatsby-plugin-intl/blob/master/src/gatsby-node.js#L27-L34
Я хотел бы получить доступ к переменной intl.language
из контекста на страницезапрос.Это мой (ошибочный) код на данном этапе:
query($slug: String!, $intl: String) {
contentfulPerson(slug: {eq: $slug}, node_locale: {eq: $intl.language}) {
name
}
}
Contentful - это безголовая CMS, которую я использую и из которой я хотел бы получать данные в правильной локали.
Очевидно, этот кодимеет две проблемы: $intl
не является строкой, а $intl.language
не является синтаксически правильным.Но я не знаю, как решить любую проблему.
Я думаю, я мог бы либо разветвлять плагин, либо сделать что-то в моем собственном gatsby-node.js
, чтобы сделать язык доступным как переменная верхнего уровня в контексте,но мне интересно знать, есть ли способ сделать это напрямую.В документации Гэтсби говорится, что переменные запроса могут быть сложными (https://www.gatsbyjs.org/docs/graphql-reference/#query-variables), но в приведенном ими примере они не показывают, как определяются типы или как получить доступ к свойству в этих переменных.
EDIT: я пытался переместить язык в контекстную переменную верхнего уровня в моем gatsby-node.js
, используя этот код:
exports.onCreatePage = ({page, actions}) => {
const { createPage, deletePage } = actions
deletePage(page)
createPage({
...page,
context: {
...page.context,
language: page.context.intl.language
}
})
}
, но программе не хватает памяти (даже при увеличении max_old_space_size
)