Skip to content

Commit e065606

Browse files
authored
Merge pull request #46 from DouglasNeuroInformatics/dev
fix: sync language document attribute
2 parents f90db70 + a3bd994 commit e065606

File tree

4 files changed

+45
-27
lines changed

4 files changed

+45
-27
lines changed

src/i18n/store.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { SetOptional } from 'type-fest';
22
import { createStore } from 'zustand/vanilla';
3+
import { subscribeWithSelector } from 'zustand/middleware';
34

45
import 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

3942
export 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,

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"prettier.config.js",
2424
"tailwind.config.cjs",
2525
"tsup.config.mts",
26-
"vite.config.mts"
26+
"vite.config.mts",
27+
"vitest.config.mts"
2728
]
2829
}

vite.config.mts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,5 @@ export default defineConfig({
1919
alias: {
2020
'@': path.resolve(import.meta.dirname, 'src')
2121
}
22-
},
23-
test: {
24-
coverage: {
25-
exclude: ['**/*.d.ts', '**/index.ts', '**/*.stories.tsx', 'src/testing/*'],
26-
include: ['src/**/*'],
27-
provider: 'v8',
28-
thresholds: {
29-
branches: 75,
30-
functions: 30,
31-
lines: 50,
32-
statements: 50
33-
}
34-
},
35-
environment: 'happy-dom',
36-
root: import.meta.dirname,
37-
setupFiles: ['src/testing/setup-tests.ts'],
38-
watch: false
3922
}
4023
});

vitest.config.mts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { defineConfig, mergeConfig } from 'vitest/config';
2+
import viteConfig from './vite.config.mjs';
3+
4+
export default mergeConfig(
5+
viteConfig,
6+
defineConfig({
7+
test: {
8+
coverage: {
9+
exclude: ['**/*.d.ts', '**/index.ts', '**/*.stories.tsx', 'src/testing/*'],
10+
include: ['src/**/*'],
11+
provider: 'v8',
12+
thresholds: {
13+
branches: 75,
14+
functions: 30,
15+
lines: 50,
16+
statements: 50
17+
}
18+
},
19+
environment: 'happy-dom',
20+
root: import.meta.dirname,
21+
setupFiles: ['src/testing/setup-tests.ts'],
22+
watch: false
23+
}
24+
})
25+
);

0 commit comments

Comments
 (0)