feat(SPA): i18n internationzalization, english and french
This commit is contained in:
1 parent
7f1e8e572d
commit
721311a643
88 files changed
+4438
-1148
No files matched your search
@@ -0,0 +1,54 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { initializeLocale, locale, setLocale, t, formatNumber } from './index'
|
||||
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks()
|
||||
localStorage.clear()
|
||||
initializeLocale()
|
||||
})
|
||||
|
||||
describe('Resolve the language before rendering', () => {
|
||||
it('keeps English default with a French browser', () => {
|
||||
vi.spyOn(navigator, 'language', 'get').mockReturnValue('fr-FR')
|
||||
localStorage.clear()
|
||||
initializeLocale()
|
||||
expect([locale.value, document.documentElement.lang]).toEqual(['en', 'en'])
|
||||
})
|
||||
it.each([null, 'en', 'fr', 'unsupported'])(
|
||||
'resolves stored %s independently of browser language',
|
||||
(stored) => {
|
||||
if (stored) localStorage.setItem('renewcms-language', stored)
|
||||
initializeLocale()
|
||||
expect([locale.value, document.documentElement.lang]).toEqual(
|
||||
stored === 'fr' ? ['fr', 'fr'] : ['en', 'en'],
|
||||
)
|
||||
},
|
||||
)
|
||||
it('defaults to English when preference storage is unreadable', () => {
|
||||
setLocale('fr')
|
||||
vi.spyOn(Storage.prototype, 'getItem').mockImplementation(() => {
|
||||
throw new Error('denied')
|
||||
})
|
||||
initializeLocale()
|
||||
expect([locale.value, document.documentElement.lang]).toEqual(['en', 'en'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('Remember language on this browser', () => {
|
||||
it('restores the selected French language on initialization', () => {
|
||||
setLocale('fr')
|
||||
initializeLocale()
|
||||
expect(locale.value).toBe('fr')
|
||||
})
|
||||
it('switches when storage cannot be written', () => {
|
||||
vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {
|
||||
throw new Error('denied')
|
||||
})
|
||||
setLocale('fr')
|
||||
expect([t('Log in'), document.documentElement.lang]).toEqual(['Se connecter', 'fr'])
|
||||
})
|
||||
it('formats numbers according to the selected locale', () => {
|
||||
setLocale('fr')
|
||||
expect(formatNumber(1234.5)).toBe(new Intl.NumberFormat('fr').format(1234.5))
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user