diff --git a/packages/next/build/webpack/loaders/next-serverless-loader.ts b/packages/next/build/webpack/loaders/next-serverless-loader.ts index 7ef24ad2f66ee..d531cf46cd112 100644 --- a/packages/next/build/webpack/loaders/next-serverless-loader.ts +++ b/packages/next/build/webpack/loaders/next-serverless-loader.ts @@ -229,7 +229,7 @@ const nextServerlessLoader: loader.Loader = function () { detectedLocale = accept.language( req.headers['accept-language'], i18n.locales - ) + ) || i18n.defaultLocale } if ( diff --git a/packages/next/next-server/server/next-server.ts b/packages/next/next-server/server/next-server.ts index ba3055d91c9cc..b920d7fc45957 100644 --- a/packages/next/next-server/server/next-server.ts +++ b/packages/next/next-server/server/next-server.ts @@ -308,10 +308,9 @@ export default class Server { let detectedLocale = detectLocaleCookie(req, i18n.locales) if (!detectedLocale) { - detectedLocale = accept.language( - req.headers['accept-language'], - i18n.locales - ) + detectedLocale = + accept.language(req.headers['accept-language'], i18n.locales) || + i18n.defaultLocale } if ( diff --git a/test/integration/i18n-support/test/index.test.js b/test/integration/i18n-support/test/index.test.js index 822f85ffdfe4f..a09d7aaea3f32 100644 --- a/test/integration/i18n-support/test/index.test.js +++ b/test/integration/i18n-support/test/index.test.js @@ -58,6 +58,31 @@ function runTests() { expect(parsedUrl2.query).toEqual({ hello: 'world' }) }) + it('should redirect to default locale route for / without accept-language', async () => { + const res = await fetchViaHTTP(appPort, '/', undefined, { + redirect: 'manual', + }) + expect(res.status).toBe(307) + + const parsedUrl = url.parse(res.headers.get('location'), true) + expect(parsedUrl.pathname).toBe('/en') + expect(parsedUrl.query).toEqual({}) + + const res2 = await fetchViaHTTP( + appPort, + '/', + { hello: 'world' }, + { + redirect: 'manual', + } + ) + expect(res2.status).toBe(307) + + const parsedUrl2 = url.parse(res2.headers.get('location'), true) + expect(parsedUrl2.pathname).toBe('/en') + expect(parsedUrl2.query).toEqual({ hello: 'world' }) + }) + it('should load getStaticProps page correctly SSR', async () => { const html = await renderViaHTTP(appPort, '/en-US/gsp') const $ = cheerio.load(html)