wangzhibo
2023-10-31 9da39812105bfc387db3b3b7c4896983e03d247d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { createContextProvider } from '@solid-primitives/context'
import * as i18n from '@solid-primitives/i18n'
import { makePersisted } from '@solid-primitives/storage'
import { createSignal } from 'solid-js'
import { LANG } from '~/constants'
import dict, { Dict } from './dict'
 
export const [locale, setLocale] = makePersisted(
  createSignal<LANG>(
    Reflect.has(dict, navigator.language)
      ? (navigator.language as LANG)
      : LANG.EN,
  ),
  {
    name: 'lang',
    storage: localStorage,
  },
)
 
export const [I18nProvider, useMaybeI18n] = createContextProvider<
  [i18n.Translator<Dict>],
  { locale: LANG }
>((props) => [
  i18n.translator(() => i18n.flatten(dict[props.locale]), i18n.resolveTemplate),
])
 
export const useI18n = () => useMaybeI18n()!