(I get the following issue with both gatsby-source-prismic-graphql
as well as @prismicio/gatsby-source-prismic-graphql
)
I have a multi-locale site and have had to convert the lang
/locale code in URLs to country codes (actually a mix of country codes and lang codes, but for simplicity's sake and in my example project it's just country codes), so instead of /en-gb/my-page
or /en/my-page
, it would be /gb/my-page
. It's not possible to achieve this with the plugin as it is, so I've had to hook into Gatsby's onCreatePage
API and modify the path with a helper function like so:
exports.localeToCountryCode = localeCode => localeCode.split("-")[1].toLowerCase()
(this is also used in the linkResolver
)
Everything seems to work locally, in production and also when previewing published documents, but for some reason this seems to interfere with trying to preview unpublished documents.
My page query looks like this:
query($lang: String!, $uid: String!) {
prismic {
allPosts(lang: $lang, uid: $uid) {
...
It seems as though the lang
variable isn't getting passed to the page query, since props.data.prismic.allPosts.edges
is returning an empty array:
If I remove the lang
filter from the query, I then get data returned and am able to preview unpublished documents. It also seems to work (even with the lang
filter) if I don't convert the locale codes to country codes.
When clicking on the preview button, I am taken to http://localhost:8000/preview/post?lang=de&uid=mein-erster-beitrag, which I think is correct, as I believe this is the default preview path, plus the params with the correct locale and uid/slug as I've defined it in Prismic.
I've set up previews and configured my pages with the type
, match
and component
properties:
{
type: "Post",
match: "/:lang/posts/:uid",
component: require.resolve("./src/templates/post.js"),
}
You can find a reproducible test case here: GitHub - mrseanbaines/prismic-previews-multi-locale.