Skip to content

Commit d2ce4b6

Browse files
committed
refactor: use current browser lang as extension default lang on first installation
1 parent 71c667e commit d2ce4b6

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

tests/utils/fake-browser.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface FakeBrowserOptions {
1010
usage: number
1111
}
1212
fakeAcceptedLanguages?: string[]
13+
fakeUILanguage?: string
1314
}
1415

1516
export function resetFakeBrowser(options: FakeBrowserOptions = {}) {
@@ -28,6 +29,7 @@ export function resetFakeBrowser(options: FakeBrowserOptions = {}) {
2829
// @ts-expect-error - for test env
2930
browser.i18n = {
3031
getAcceptLanguages: () => options.fakeAcceptedLanguages ?? ['en'],
32+
getUILanguage: () => options.fakeUILanguage ?? 'en',
3133
}
3234
}
3335

utils/i18n/browser-locale.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,16 @@ export async function getAcceptLanguages<L extends string>(languages: L[], fallb
3333
}
3434
return fallback
3535
}
36+
37+
/**
38+
* get current browser UI language, if matched, normalize and return it
39+
* @returns the normalized browser locale string
40+
*/
41+
export function useCurrentBrowserLocale<L extends string>(languages: L[], fallback: L): L {
42+
const currentLocale = browser.i18n.getUILanguage()
43+
const normalizedLocale = normalizeLocale(currentLocale)
44+
if (languages.includes(normalizedLocale as L)) {
45+
return normalizedLocale as L
46+
}
47+
return fallback
48+
}

utils/i18n/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { lazyInitialize } from '../memo'
2121
import { only } from '../runtime'
2222
import { JsonPaths } from '../type-utils'
2323
import { getUserConfig } from '../user-config'
24-
import { getAcceptLanguages } from './browser-locale'
24+
import { useCurrentBrowserLocale } from './browser-locale'
2525
import { SUPPORTED_LOCALES, SupportedLocaleCode } from './constants'
2626

2727
// Type-define 'en-US' as the master schema for the resource
@@ -75,7 +75,7 @@ function formatDuration(t: ComposerTranslation, seconds: number) {
7575
export const createI18nInstance = lazyInitialize(async () => {
7676
const userConfig = await getUserConfig()
7777
const localeInConfig = userConfig?.locale.current.toRef()
78-
const defaultLocale = localeInConfig.value ?? await getAcceptLanguages(SUPPORTED_LOCALES.map((l) => l.code), 'en')
78+
const defaultLocale = localeInConfig.value ?? useCurrentBrowserLocale(SUPPORTED_LOCALES.map((l) => l.code), 'en')
7979

8080
const i18n = createI18n<[MessageSchema], SupportedLocaleCode>({
8181
legacy: false,

0 commit comments

Comments
 (0)