diff --git a/src/templates/plugin.main.js b/src/templates/plugin.main.js index b525bfd6b..e4bf546ca 100644 --- a/src/templates/plugin.main.js +++ b/src/templates/plugin.main.js @@ -126,6 +126,11 @@ export default async (context) => { } const doDetectBrowserLanguage = () => { + // Browser detection is ignored if it is a nuxt generate. + if (process.static && process.server) { + return false + } + const { alwaysRedirect, fallbackLocale } = detectBrowserLanguage let matchedLocale diff --git a/test/browser.test.js b/test/browser.test.js index b2f05dd62..610993067 100644 --- a/test/browser.test.js +++ b/test/browser.test.js @@ -185,6 +185,59 @@ describe(`${browserString} (generate)`, () => { }) }) +describe(`${browserString} (generate with detectBrowserLanguage.fallbackLocale)`, () => { + let browser + let page + let port + // Local method that overrides imported one. + let url + + beforeAll(async () => { + const distDir = resolve(__dirname, 'fixture', 'basic', '.nuxt-generate') + + const overrides = { + generate: { dir: distDir }, + i18n: { + detectBrowserLanguage: { + fallbackLocale: 'en' + } + } + } + + await generate(loadConfig(__dirname, 'basic', overrides, { merge: true })) + + port = await getPort() + url = path => `http://localhost:${port}${path}` + + browser = await createBrowser(browserString, { + folder: distDir, + staticServer: { + folder: distDir, + port + }, + extendPage (page) { + return { + navigate: createNavigator(page) + } + } + }) + }) + + afterAll(async () => { + if (browser) { + await browser.close() + } + }) + + test('generates pages in all locales', async () => { + page = await browser.page(url('/')) + expect(await page.getText('body')).toContain('locale: en') + + await page.navigate('/fr') + expect(await page.getText('body')).toContain('locale: fr') + }) +}) + describe(`${browserString} (no fallbackLocale, browser language not supported)`, () => { let nuxt let browser diff --git a/test/module.test.js b/test/module.test.js index 21eb37a75..7b8cab48f 100644 --- a/test/module.test.js +++ b/test/module.test.js @@ -1,4 +1,6 @@ -import { setup, loadConfig, get, url } from '@nuxtjs/module-test-utils' +import { resolve } from 'path' +import { readFileSync } from 'fs' +import { generate, setup, loadConfig, get, url } from '@nuxtjs/module-test-utils' import { JSDOM } from 'jsdom' import { getSeoTags } from './utils' @@ -1166,3 +1168,35 @@ describe('prefix + detectBrowserLanguage + alwaysRedirect', () => { expect(dom.querySelector('#current-locale').textContent).toBe('locale: fr') }) }) + +describe('generate with detectBrowserLanguage.fallbackLocale', () => { + const distDir = resolve(__dirname, 'fixture', 'basic', '.nuxt-generate') + + beforeAll(async () => { + const overrides = { + generate: { dir: distDir }, + i18n: { + detectBrowserLanguage: { + fallbackLocale: 'en' + } + } + } + + await generate(loadConfig(__dirname, 'basic', overrides, { merge: true })) + }) + + test('pre-renders all locales', () => { + let dom + let contents + + contents = readFileSync(resolve(distDir, 'index.html'), 'utf-8') + dom = getDom(contents) + expect(dom.querySelector('#current-page')).toBeDefined() + expect(dom.querySelector('#current-page').textContent).toBe('page: Homepage') + + contents = readFileSync(resolve(distDir, 'fr/index.html'), 'utf-8') + dom = getDom(contents) + expect(dom.querySelector('#current-page')).toBeDefined() + expect(dom.querySelector('#current-page').textContent).toBe('page: Accueil') + }) +})