Skip to content

Commit f351510

Browse files
authored
fix: not work detectBrowserLanguage on client-side correctly (#2475)
* fix: not work detectBrowserLanguage on client-side correctly * fix
1 parent 5c40ec1 commit f351510

File tree

9 files changed

+110
-1
lines changed

9 files changed

+110
-1
lines changed

specs/fixtures/issues/2473/app.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<template>
2+
<NuxtPage />
3+
</template>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"Meta": {
3+
"locale": "English"
4+
},
5+
"Pages": {
6+
"Home": {
7+
"title": "Home page",
8+
"description": "Home page description"
9+
},
10+
"About": {
11+
"title": "About page",
12+
"description": "About page description"
13+
}
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"Meta": {
3+
"locale": "French"
4+
},
5+
"Pages": {
6+
"Home": {
7+
"title": "Page d'accueil",
8+
"description": "Page d'accueil description"
9+
},
10+
"About": {
11+
"title": "À propos",
12+
"description": "A propos description"
13+
}
14+
}
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import type { LocaleObject } from '#i18n'
2+
3+
const locales = [
4+
{ code: 'en', iso: 'en-US', file: 'en-US.json' },
5+
{ code: 'fr', iso: 'fr-FR', file: 'fr-FR.json' }
6+
] as LocaleObject[]
7+
8+
const defaultLocale = locales[0]
9+
10+
export default defineNuxtConfig({
11+
modules: ['@nuxtjs/i18n'],
12+
i18n: {
13+
locales,
14+
defaultLocale: defaultLocale.code,
15+
langDir: 'locales/',
16+
lazy: true,
17+
strategy: 'no_prefix',
18+
detectBrowserLanguage: {
19+
fallbackLocale: defaultLocale.code
20+
}
21+
}
22+
})
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "nuxt3-test-issues-2473",
3+
"private": true,
4+
"scripts": {
5+
"build": "nuxt build",
6+
"dev": "nuxt dev",
7+
"generate": "nuxt generate",
8+
"preview": "nuxt preview"
9+
},
10+
"devDependencies": {
11+
"@nuxtjs/i18n": "latest",
12+
"nuxt": "latest"
13+
}
14+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<template>
2+
<h1 id="title" v-text="$t('Pages.About.title')" />
3+
<p v-text="$t('Pages.About.description')" />
4+
<p v-text="$t('Meta.locale')" />
5+
<NuxtLinkLocale id="locale" to="/">{{ $t('Pages.Home.title') }}</NuxtLinkLocale>
6+
</template>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<template>
2+
<h1 id="title" v-text="$t('Pages.Home.title')" />
3+
<p v-text="$t('Pages.Home.description')" />
4+
<p v-text="$t('Meta.locale')" />
5+
<NuxtLinkLocale id="locale" to="/about">{{ $t('Pages.About.title') }}</NuxtLinkLocale>
6+
</template>

specs/issues/2473.spec.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { test, expect, describe } from 'vitest'
2+
import { fileURLToPath } from 'node:url'
3+
import { URL } from 'node:url'
4+
import { setup, url, createPage } from '../utils'
5+
import { getText } from '../helper'
6+
7+
describe('#2473', async () => {
8+
await setup({
9+
rootDir: fileURLToPath(new URL(`../fixtures/issues/2473`, import.meta.url))
10+
})
11+
12+
test('should be respected detect browser language', async () => {
13+
const home = url('/')
14+
const page = await createPage(undefined, { locale: 'fr' })
15+
await page.goto(home)
16+
17+
expect(await getText(page, '#title')).toEqual(`Page d'accueil`)
18+
19+
// change page
20+
await page.locator('#locale').click()
21+
await page.waitForURL('**/about')
22+
expect(await getText(page, '#title')).toEqual(`À propos`)
23+
24+
// one more change page
25+
await page.locator('#locale').click()
26+
expect(await getText(page, '#title')).toEqual(`Page d'accueil`)
27+
})
28+
})

src/runtime/internal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ export function detectBrowserLanguage<Context extends NuxtApp = NuxtApp>(
335335

336336
// browser locale detection happens during first access only
337337
if (!firstAccess) {
338-
return { locale: '', stat: false, reason: 'first_access_only' }
338+
return { locale: strategy === 'no_prefix' ? locale : '', stat: false, reason: 'first_access_only' }
339339
}
340340

341341
const { redirectOn, alwaysRedirect, useCookie, fallbackLocale } =

0 commit comments

Comments
 (0)