Есть ли лучший способ сделать i18n в Gatsby с Netlify CMS? - PullRequest
0 голосов
/ 26 мая 2020

В моих файлах разметки, созданных Netlify CMS, у меня есть объекты, содержащие переводы на 2 языка.

Я создаю 2 страницы для каждого файла разметки, передавая язык в контекст, чтобы я мог использовать его как переменная в моем запросе GraphQL. Для ссылок и другого контента, который изменяется в зависимости от языка, я должен «синхронизировать c» язык из реквизита в переменную, хранящуюся в localStorage.

Хотя это должно работать, это кажется неприятным решением. Есть ли лучший способ сделать это с помощью Gatsby + Netlify?

Также, если это кого-то интересует, вот мой gatsby-node.js:

const path = require(`path`)
const { createFilePath } = require(`gatsby-source-filesystem`)

exports.onCreateNode = ({ node, getNode, actions }) => {
  const { createNodeField } = actions
  if (node.internal.type === `MarkdownRemark`) {
    const slug = '/projects' + createFilePath({ node, getNode, basePath: `projects` })
    createNodeField({
      node,
      name: `slug`,
      value: slug,
    })
  }
}

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions
  const result = await graphql(`
    query {
      allMarkdownRemark {
        edges {
          node {
            fields {
              slug
            }
          }
        }
      }
    }
  `)
  let languages = ['en', 'cz']
  result.data.allMarkdownRemark.edges.forEach(({ node }) => {
    languages.forEach((lang) => {
      createPage({
        path: '/' + lang + node.fields.slug,
        component: path.resolve(`./src/templates/projectTemplate.js`),
        context: {
          slug: node.fields.slug,
          language: lang,
        },
      })
    })
  })
}
...