diff --git a/src/link.js b/src/link.js index 6a5fd75..93197ac 100644 --- a/src/link.js +++ b/src/link.js @@ -55,6 +55,15 @@ export const changeLocale = (language, to) => { } const { routed } = window.___gatsbyIntl + const removePrefix = pathname => { + const base = + typeof __BASE_PATH__ !== `undefined` ? __BASE_PATH__ : __PATH_PREFIX__ + if (base && pathname.indexOf(base) === 0) { + pathname = pathname.slice(base.length) + } + return pathname + } + const removeLocalePart = pathname => { if (!routed) { return pathname @@ -63,7 +72,8 @@ export const changeLocale = (language, to) => { return pathname.substring(i) } - const pathname = to || removeLocalePart(window.location.pathname) + const pathname = + to || removeLocalePart(removePrefix(window.location.pathname)) // TODO: check slash const link = `/${language}${pathname}${window.location.search}` localStorage.setItem("gatsby-intl-language", language) diff --git a/src/wrap-page.js b/src/wrap-page.js index 9a280b7..918b99f 100644 --- a/src/wrap-page.js +++ b/src/wrap-page.js @@ -43,7 +43,7 @@ export default ({ element, props }) => { const { pageContext, location } = props const { intl } = pageContext - const { language, languages, redirect, routed } = intl + const { language, languages, redirect, routed, originalPath } = intl if (typeof window !== "undefined") { window.___gatsbyIntl = intl @@ -52,7 +52,7 @@ export default ({ element, props }) => { const isRedirect = redirect && !routed if (isRedirect) { - const { pathname, search } = location + const { search } = location // Skip build, Browsers only if (typeof window !== "undefined") { @@ -68,7 +68,7 @@ export default ({ element, props }) => { } const queryParams = search || "" - const newUrl = withPrefix(`/${detected}${pathname}${queryParams}`) + const newUrl = withPrefix(`/${detected}${originalPath}${queryParams}`) window.localStorage.setItem("gatsby-intl-language", detected) window.location.replace(newUrl) }