Files
svgedit/tests/locale.test.js
JFH 97386d20b5 Jan2026 fixes (#1077)
* fix release script
* fix svgcanvas edge cases
* Update path-actions.js
* add modern js
* update deps
* Update CHANGES.md
2026-01-11 00:57:06 +01:00

79 lines
2.3 KiB
JavaScript

import { afterEach, describe, expect, test } from 'vitest'
import { putLocale, t } from '../src/editor/locale.js'
const goodLangs = ['en', 'fr', 'de']
const originalNavigator = {
userLanguage: navigator.userLanguage,
language: navigator.language
}
const setNavigatorProp = (prop, value) => {
Object.defineProperty(navigator, prop, {
value,
configurable: true,
writable: true
})
}
const restoreNavigatorProp = (prop, value) => {
if (value === undefined) {
Reflect.deleteProperty(navigator, prop)
return
}
setNavigatorProp(prop, value)
}
afterEach(() => {
restoreNavigatorProp('userLanguage', originalNavigator.userLanguage)
restoreNavigatorProp('language', originalNavigator.language)
})
describe('locale loader', () => {
test('falls back to English when lang is not supported', async () => {
const result = await putLocale('xx', goodLangs)
expect(result.langParam).toBe('en')
expect(t('common.ok')).toBe('OK')
})
test('loads explicit test locale bundle', async () => {
const result = await putLocale('test', goodLangs)
expect(result.langParam).toBe('test')
expect(t('common.ok')).toBe('OK')
expect(t('misc.powered_by')).toBe('Powered by')
})
test('uses navigator.userLanguage when available', async () => {
setNavigatorProp('userLanguage', 'fr')
setNavigatorProp('language', 'en-US')
const result = await putLocale('', goodLangs)
expect(result.langParam).toBe('fr')
expect(t('common.ok')).toBe('OK')
})
test('uses navigator.language and still falls back to English for unsupported locale', async () => {
Reflect.deleteProperty(navigator, 'userLanguage')
setNavigatorProp('language', 'pt-BR')
const result = await putLocale('', goodLangs)
expect(result.langParam).toBe('en')
expect(t('common.ok')).toBe('OK')
})
test('uses navigator.language with supported locale', async () => {
Reflect.deleteProperty(navigator, 'userLanguage')
setNavigatorProp('language', 'de')
const result = await putLocale('', goodLangs)
expect(result.langParam).toBe('de')
})
test('uses explicit lang parameter over navigator', async () => {
setNavigatorProp('userLanguage', 'de')
setNavigatorProp('language', 'de')
const result = await putLocale('en', goodLangs)
expect(result.langParam).toBe('en')
})
})