Skip to content

Commit f1c5aca

Browse files
authored
fix: don't do browser language detection during Nuxt generate (#718)
During generate there is no point in guessing the browser language as it's not the target's user language anyway. Co-authored-by: Rafal Chlodnicki
1 parent d2f4bff commit f1c5aca

File tree

3 files changed

+93
-1
lines changed

3 files changed

+93
-1
lines changed

src/templates/plugin.main.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ export default async (context) => {
126126
}
127127

128128
const doDetectBrowserLanguage = () => {
129+
// Browser detection is ignored if it is a nuxt generate.
130+
if (process.static && process.server) {
131+
return false
132+
}
133+
129134
const { alwaysRedirect, fallbackLocale } = detectBrowserLanguage
130135

131136
let matchedLocale

test/browser.test.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,59 @@ describe(`${browserString} (generate)`, () => {
185185
})
186186
})
187187

188+
describe(`${browserString} (generate with detectBrowserLanguage.fallbackLocale)`, () => {
189+
let browser
190+
let page
191+
let port
192+
// Local method that overrides imported one.
193+
let url
194+
195+
beforeAll(async () => {
196+
const distDir = resolve(__dirname, 'fixture', 'basic', '.nuxt-generate')
197+
198+
const overrides = {
199+
generate: { dir: distDir },
200+
i18n: {
201+
detectBrowserLanguage: {
202+
fallbackLocale: 'en'
203+
}
204+
}
205+
}
206+
207+
await generate(loadConfig(__dirname, 'basic', overrides, { merge: true }))
208+
209+
port = await getPort()
210+
url = path => `http://localhost:${port}${path}`
211+
212+
browser = await createBrowser(browserString, {
213+
folder: distDir,
214+
staticServer: {
215+
folder: distDir,
216+
port
217+
},
218+
extendPage (page) {
219+
return {
220+
navigate: createNavigator(page)
221+
}
222+
}
223+
})
224+
})
225+
226+
afterAll(async () => {
227+
if (browser) {
228+
await browser.close()
229+
}
230+
})
231+
232+
test('generates pages in all locales', async () => {
233+
page = await browser.page(url('/'))
234+
expect(await page.getText('body')).toContain('locale: en')
235+
236+
await page.navigate('/fr')
237+
expect(await page.getText('body')).toContain('locale: fr')
238+
})
239+
})
240+
188241
describe(`${browserString} (no fallbackLocale, browser language not supported)`, () => {
189242
let nuxt
190243
let browser

test/module.test.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import { setup, loadConfig, get, url } from '@nuxtjs/module-test-utils'
1+
import { resolve } from 'path'
2+
import { readFileSync } from 'fs'
3+
import { generate, setup, loadConfig, get, url } from '@nuxtjs/module-test-utils'
24
import { JSDOM } from 'jsdom'
35

46
import { getSeoTags } from './utils'
@@ -1166,3 +1168,35 @@ describe('prefix + detectBrowserLanguage + alwaysRedirect', () => {
11661168
expect(dom.querySelector('#current-locale').textContent).toBe('locale: fr')
11671169
})
11681170
})
1171+
1172+
describe('generate with detectBrowserLanguage.fallbackLocale', () => {
1173+
const distDir = resolve(__dirname, 'fixture', 'basic', '.nuxt-generate')
1174+
1175+
beforeAll(async () => {
1176+
const overrides = {
1177+
generate: { dir: distDir },
1178+
i18n: {
1179+
detectBrowserLanguage: {
1180+
fallbackLocale: 'en'
1181+
}
1182+
}
1183+
}
1184+
1185+
await generate(loadConfig(__dirname, 'basic', overrides, { merge: true }))
1186+
})
1187+
1188+
test('pre-renders all locales', () => {
1189+
let dom
1190+
let contents
1191+
1192+
contents = readFileSync(resolve(distDir, 'index.html'), 'utf-8')
1193+
dom = getDom(contents)
1194+
expect(dom.querySelector('#current-page')).toBeDefined()
1195+
expect(dom.querySelector('#current-page').textContent).toBe('page: Homepage')
1196+
1197+
contents = readFileSync(resolve(distDir, 'fr/index.html'), 'utf-8')
1198+
dom = getDom(contents)
1199+
expect(dom.querySelector('#current-page')).toBeDefined()
1200+
expect(dom.querySelector('#current-page').textContent).toBe('page: Accueil')
1201+
})
1202+
})

0 commit comments

Comments
 (0)