File tree Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change 1
1
export * from './types' ;
2
2
export * from './lib/i18n' ;
3
3
export { default as i18n } from './lib/i18n' ;
4
+ export { initI18n } from './lib/i18n' ;
Original file line number Diff line number Diff line change @@ -25,6 +25,49 @@ for (const lang of Object.values(Language)) {
25
25
} ) ;
26
26
}
27
27
28
+ const normalizeNavigatorLanguage = ( input : Language | string ) : Language => {
29
+ const code = String ( input ) . toLowerCase ( ) ;
30
+ const base = code . split ( / [ _ - ] / ) [ 0 ] ; // "en-GB" -> "en", "ja-JP" -> "ja"
31
+ switch ( base ) {
32
+ case 'en' : {
33
+ return Language . en ;
34
+ }
35
+ case 'ja' : {
36
+ return Language . ja ;
37
+ }
38
+ default : {
39
+ return DEFAULT_LANG ;
40
+ }
41
+ }
42
+ } ;
43
+
44
+ export const initI18n = async (
45
+ lang ?: Language | string ,
46
+ ) : Promise < typeof i18n > => {
47
+ const resolved = normalizeNavigatorLanguage ( lang ?? DEFAULT_LANG ) ;
48
+
49
+ if ( i18n . isInitialized ) {
50
+ return i18n . changeLanguage ( resolved ) . then ( ( ) => i18n ) ;
51
+ }
52
+
53
+ return i18n
54
+ . use ( initReactI18next )
55
+ . init ( {
56
+ lng : resolved ,
57
+ fallbackLng : DEFAULT_LANG ,
58
+ resources,
59
+ supportedLngs : Object . values ( Language ) as string [ ] ,
60
+ nonExplicitSupportedLngs : true ,
61
+ lowerCaseLng : true ,
62
+ interpolation : { escapeValue : false } ,
63
+ react : {
64
+ useSuspense : false ,
65
+ transSupportBasicHtmlNodes : true ,
66
+ } ,
67
+ } )
68
+ . then ( ( ) => i18n ) ;
69
+ } ;
70
+
28
71
i18n . use ( initReactI18next ) . init ( {
29
72
fallbackLng : DEFAULT_LANG ,
30
73
interpolation : {
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import type {
6
6
7
7
export enum Language {
8
8
en = 'en' ,
9
+ ja = 'ja' ,
9
10
}
10
11
11
12
export type TranslationKey = keyof ( typeof allTranslations ) [ Language . en ] ;
You can’t perform that action at this time.
0 commit comments