Skip to content

Commit a37d87a

Browse files
authored
Merge pull request #72 from DouglasNeuroInformatics/ssr-i18n
fix: handle translator init in ssr environment
2 parents ea8a59a + c812e12 commit a37d87a

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/i18n/__tests__/translator.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,27 @@ describe('Translator', () => {
8888
)
8989
).toBe('Bonjour, tout le monde');
9090
});
91+
92+
it('should handle SSR environment where document is undefined', () => {
93+
const ssrTranslator = new Translator();
94+
const originalDocument = global.document;
95+
96+
// Simulate SSR environment
97+
// @ts-expect-error - deliberately setting document to undefined for SSR test
98+
delete global.document;
99+
100+
expect(() => {
101+
ssrTranslator.init({ defaultLanguage: 'en', translations: {} });
102+
}).not.toThrow();
103+
104+
expect(() => {
105+
ssrTranslator.changeLanguage('fr');
106+
}).not.toThrow();
107+
108+
expect(ssrTranslator.resolvedLanguage).toBe('fr');
109+
expect(ssrTranslator.t('libui.days.monday')).toBe('Lundi');
110+
111+
// Restore document
112+
global.document = originalDocument;
113+
});
91114
});

src/i18n/translator.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ export class Translator implements TranslatorType<TranslationKey> {
6868
@InitializedOnly
6969
changeLanguage(language: Language) {
7070
this.#resolvedLanguage = language;
71-
document.documentElement.lang = language;
71+
if (typeof document !== 'undefined') {
72+
document.documentElement.lang = language;
73+
}
7274
this.emitEvent('languageChange', [language]);
7375
}
7476

0 commit comments

Comments
 (0)