This repository was archived by the owner on May 10, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 67
Support for i18n in Next 10 #75
Merged
Merged
Changes from all commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
cc4de30
rough pass at i18n ssg breaking changes in next 10
lindsaylevine 89b22e6
update withoutProps/redirects to accommodate defaultLocale
lindsaylevine 7da18c2
very dirty Just Working i18n for most cases
lindsaylevine b475f4d
pre clean-up tests, no cypress yet
lindsaylevine c68d361
make i18n getDataRoute helper more DRY
lindsaylevine 0c67c4b
fix windows test
lindsaylevine 0498d83
add documentation for withoutProps and SSR pages logic for i18n
lindsaylevine c86eb09
clean up getStaticProps setup logic
lindsaylevine 348705d
fix getStaticProps redirects logic to be consistent with setup and he…
lindsaylevine d45f240
fix revalidate redirects logic and heavily comment
lindsaylevine 9609739
remove superfluous getDataRouteForI18nRoute helper
lindsaylevine fb11d14
remove superfluous getFilePathForRouteWithI18n helper
lindsaylevine 90856ad
fix existing cypress tests except a few v odd cases
lindsaylevine acc13c9
fix/move fallback i18n logic
lindsaylevine db05c51
fix previously commented out failing dataRoute tests
lindsaylevine 2d5e867
fix 404 cypress tests which expect root level 404.html
lindsaylevine 04d57b4
specifically test i18n/non-default locales in cypress
lindsaylevine 60e8a49
root level index pages need special dataRoute logic
lindsaylevine 0d45036
use splats for dynamic ssg i18n dataRoutes
lindsaylevine 96959bd
plain static routes need 2 redirects: one to defaultLocale, one to pr…
lindsaylevine 447426d
massive cleanup/refactor to transform manifest
lindsaylevine 25ff5fe
missing initialProps + fallback logic + PR feedback
lindsaylevine File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
module.exports = { | ||
target: "serverless", | ||
target: "experimental-serverless-trace", | ||
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
module.exports = { | ||
target: "experimental-serverless-trace", | ||
i18n: { | ||
locales: ["en", "fr"], | ||
defaultLocale: "en" | ||
} | ||
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
export default async function preview(req, res) { | ||
const { query } = req; | ||
const { id } = query; | ||
|
||
// Enable Preview Mode by setting the cookies | ||
res.setPreviewData({}); | ||
|
||
// Redirect to the path from the fetched post | ||
// We don't redirect to req.query.slug as that might lead to open redirect vulnerabilities | ||
res.writeHead(307, { Location: `/previewTest/${id}` }); | ||
res.end(); | ||
} |
12 changes: 12 additions & 0 deletions
12
cypress/fixtures/pages-with-i18n/api/enterPreviewStatic.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
export default async function preview(req, res) { | ||
const { query } = req; | ||
const { id } = query; | ||
|
||
// Enable Preview Mode by setting the cookies | ||
res.setPreviewData({}); | ||
|
||
// Redirect to the path from the fetched post | ||
// We don't redirect to req.query.slug as that might lead to open redirect vulnerabilities | ||
res.writeHead(307, { Location: `/previewTest/static` }); | ||
res.end(); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
export default async function exit(_, res) { | ||
// Exit the current user from "Preview Mode". This function accepts no args. | ||
res.clearPreviewData(); | ||
|
||
// Redirect the user back to the index page. | ||
res.writeHead(307, { Location: "/" }); | ||
res.end(); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
export default async function preview(req, res) { | ||
const { query } = req; | ||
const { to } = query; | ||
|
||
res.redirect(`/shows/${to}`); | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
export default async (req, res) => { | ||
// Get the params and query string parameters | ||
const { query } = req; | ||
const { params, ...queryStringParams } = query; | ||
|
||
// Get the ID of the show | ||
const id = params[0]; | ||
|
||
// Get the data | ||
const fetchRes = await fetch(`https://api.tvmaze.com/shows/${id}`); | ||
const data = await fetchRes.json(); | ||
|
||
// If show was found, return it | ||
if (fetchRes.status == 200) { | ||
res.status(200); | ||
res.json({ params, queryStringParams, show: data }); | ||
} | ||
// If show was not found, return error | ||
else { | ||
res.status(404); | ||
res.json({ error: "Show not found" }); | ||
} | ||
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
export default async (req, res) => { | ||
// Get the ID of the show | ||
const { query } = req; | ||
const { id } = query; | ||
|
||
// Get the data | ||
const fetchRes = await fetch(`https://api.tvmaze.com/shows/${id}`); | ||
const data = await fetchRes.json(); | ||
|
||
// If show was found, return it | ||
if (fetchRes.status == 200) { | ||
res.status(200); | ||
res.json({ show: data }); | ||
} | ||
// If show was not found, return error | ||
else { | ||
res.status(404); | ||
res.json({ error: "Show not found" }); | ||
} | ||
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
export default (req, res) => { | ||
// We can set custom headers | ||
res.setHeader("My-Custom-Header", "header123"); | ||
|
||
res.status(200); | ||
res.json({ message: "hello world :)" }); | ||
}; |
54 changes: 54 additions & 0 deletions
54
cypress/fixtures/pages-with-i18n/getServerSideProps/[id].js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import Error from "next/error"; | ||
import Link from "next/link"; | ||
|
||
const Show = ({ errorCode, show }) => { | ||
// If show item was not found, render 404 page | ||
if (errorCode) { | ||
return <Error statusCode={errorCode} />; | ||
} | ||
|
||
// Otherwise, render show | ||
return ( | ||
<div> | ||
<p> | ||
This page uses getInitialProps() to fetch the show with the ID provided | ||
in the URL: /shows/:id | ||
<br /> | ||
Refresh the page to see server-side rendering in action. | ||
<br /> | ||
You can also try changing the ID to any other number between 1-10000. | ||
</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
}; | ||
|
||
export const getServerSideProps = async ({ params }) => { | ||
// The ID to render | ||
const { id } = params; | ||
|
||
const res = await fetch(`https://api.tvmaze.com/shows/${id}`); | ||
const data = await res.json(); | ||
|
||
// Set error code if show item could not be found | ||
const errorCode = res.status > 200 ? res.status : false; | ||
|
||
return { | ||
props: { | ||
errorCode, | ||
show: data, | ||
}, | ||
}; | ||
}; | ||
|
||
export default Show; |
55 changes: 55 additions & 0 deletions
55
cypress/fixtures/pages-with-i18n/getServerSideProps/catch/all/[...slug].js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
import Error from "next/error"; | ||
import Link from "next/link"; | ||
|
||
const Show = ({ errorCode, show }) => { | ||
// If show item was not found, render 404 page | ||
if (errorCode) { | ||
return <Error statusCode={errorCode} />; | ||
} | ||
|
||
// Otherwise, render show | ||
return ( | ||
<div> | ||
<p> | ||
This page uses getInitialProps() to fetch the show with the ID provided | ||
in the URL: /shows/:id | ||
<br /> | ||
Refresh the page to see server-side rendering in action. | ||
<br /> | ||
You can also try changing the ID to any other number between 1-10000. | ||
</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
}; | ||
|
||
export const getServerSideProps = async ({ params }) => { | ||
// The ID to render | ||
const { slug } = params; | ||
const id = slug[0]; | ||
|
||
const res = await fetch(`https://api.tvmaze.com/shows/${id}`); | ||
const data = await res.json(); | ||
|
||
// Set error code if show item could not be found | ||
const errorCode = res.status > 200 ? res.status : false; | ||
|
||
return { | ||
props: { | ||
errorCode, | ||
show: data, | ||
}, | ||
}; | ||
}; | ||
|
||
export default Show; |
38 changes: 38 additions & 0 deletions
38
cypress/fixtures/pages-with-i18n/getServerSideProps/static.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import Link from "next/link"; | ||
|
||
const Show = ({ show }) => ( | ||
<div> | ||
<p> | ||
This page uses getInitialProps() to fetch the show with the ID provided in | ||
the URL: /shows/:id | ||
<br /> | ||
Refresh the page to see server-side rendering in action. | ||
<br /> | ||
You can also try changing the ID to any other number between 1-10000. | ||
</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
|
||
export const getServerSideProps = async ({ params }) => { | ||
const res = await fetch("https://api.tvmaze.com/shows/42"); | ||
const data = await res.json(); | ||
|
||
return { | ||
props: { | ||
show: data, | ||
}, | ||
}; | ||
}; | ||
|
||
export default Show; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import Link from "next/link"; | ||
|
||
const Show = ({ show }) => ( | ||
<div> | ||
<p>This page uses getStaticProps() to pre-fetch a TV show.</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
|
||
export async function getStaticPaths() { | ||
// Set the paths we want to pre-render | ||
const paths = [{ params: { id: "1" } }, { params: { id: "2" } }]; | ||
|
||
// We'll pre-render only these paths at build time. | ||
// { fallback: false } means other routes should 404. | ||
return { paths, fallback: false }; | ||
} | ||
|
||
export async function getStaticProps({ params }) { | ||
// The ID to render | ||
const { id } = params; | ||
|
||
const res = await fetch(`https://api.tvmaze.com/shows/${id}`); | ||
const data = await res.json(); | ||
|
||
return { | ||
props: { | ||
show: data, | ||
}, | ||
}; | ||
} | ||
|
||
export default Show; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import Link from "next/link"; | ||
|
||
const Show = ({ show }) => ( | ||
<div> | ||
<p>This page uses getStaticProps() to pre-fetch a TV show.</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
|
||
export async function getStaticProps(context) { | ||
const res = await fetch(`https://api.tvmaze.com/shows/71`); | ||
const data = await res.json(); | ||
|
||
return { | ||
props: { | ||
show: data, | ||
}, | ||
}; | ||
} | ||
|
||
export default Show; |
32 changes: 32 additions & 0 deletions
32
cypress/fixtures/pages-with-i18n/getStaticProps/with-revalidate.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import Link from "next/link"; | ||
|
||
const Show = ({ show }) => ( | ||
<div> | ||
<p>This page uses getStaticProps() to pre-fetch a TV show.</p> | ||
|
||
<hr /> | ||
|
||
<h1>Show #{show.id}</h1> | ||
<p>{show.name}</p> | ||
|
||
<hr /> | ||
|
||
<Link href="/"> | ||
<a>Go back home</a> | ||
</Link> | ||
</div> | ||
); | ||
|
||
export async function getStaticProps(context) { | ||
const res = await fetch(`https://api.tvmaze.com/shows/71`); | ||
const data = await res.json(); | ||
|
||
return { | ||
props: { | ||
show: data, | ||
}, | ||
revalidate: 1, | ||
}; | ||
} | ||
|
||
export default Show; |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.