11import type { SetOptional } from 'type-fest' ;
22import { createStore } from 'zustand/vanilla' ;
3+ import { subscribeWithSelector } from 'zustand/middleware' ;
34
45import libui from '@/i18n/translations/libui.json' ;
56
@@ -26,15 +27,17 @@ export type TranslationStore = {
2627 translations : Translations ;
2728} ;
2829
29- export const translationStore = createStore < TranslationStore > ( ( set ) => ( {
30- changeLanguage ( language ) {
31- set ( { resolvedLanguage : language } ) ;
32- } ,
33- fallbackLanguage : 'en' ,
34- isInitialized : false ,
35- resolvedLanguage : 'en' ,
36- translations : { libui }
37- } ) ) ;
30+ export const translationStore = createStore (
31+ subscribeWithSelector < TranslationStore > ( ( set ) => ( {
32+ changeLanguage ( language ) {
33+ set ( { resolvedLanguage : language } ) ;
34+ } ,
35+ fallbackLanguage : 'en' ,
36+ isInitialized : false ,
37+ resolvedLanguage : 'en' ,
38+ translations : { libui }
39+ } ) )
40+ ) ;
3841
3942export const i18n : I18N = {
4043 init : ( { defaultLanguage, fallbackLanguage, translations } : InitOptions = { } ) => {
@@ -43,6 +46,12 @@ export const i18n: I18N = {
4346 console . error ( 'Cannot reinitialize translations store' ) ;
4447 return ;
4548 }
49+ translationStore . subscribe (
50+ ( state ) => state . resolvedLanguage ,
51+ ( resolvedLanguage ) => {
52+ document . documentElement . lang = resolvedLanguage ;
53+ }
54+ ) ;
4655 translationStore . setState ( {
4756 fallbackLanguage : fallbackLanguage ?? state . fallbackLanguage ,
4857 isInitialized : true ,
0 commit comments