@@ -10,6 +10,7 @@ export type TranslateParams = Record<string, unknown>
1010export type Locale = "en" | "es" | "fr" | "ru" | "ja" | "zh-Hans"
1111
1212const SUPPORTED_LOCALES : readonly Locale [ ] = [ "en" , "es" , "fr" , "ru" , "ja" , "zh-Hans" ] as const
13+ const SUPPORTED_LOCALES_BY_LOWER = new Map ( SUPPORTED_LOCALES . map ( ( locale ) => [ locale . toLowerCase ( ) , locale ] ) )
1314
1415const localeMessagesCache = new Map < Locale , Messages > ( [ [ "en" , enMessages ] ] )
1516const localeMessagesPromises = new Map < Locale , Promise < Messages > > ( )
@@ -32,20 +33,19 @@ function matchSupportedLocale(value: string | undefined): Locale | null {
3233
3334 const normalized = normalizeLocaleTag ( value )
3435 const lower = normalized . toLowerCase ( )
35- const supportedLower = new Map ( SUPPORTED_LOCALES . map ( ( locale ) => [ locale . toLowerCase ( ) , locale ] ) )
36- const exact = supportedLower . get ( lower )
36+ const exact = SUPPORTED_LOCALES_BY_LOWER . get ( lower )
3737 if ( exact ) return exact
3838
3939 const parts = lower . split ( "-" )
4040 const base = parts [ 0 ]
4141 if ( ! base ) return null
4242
4343 if ( base === "zh" ) {
44- const zhHans = supportedLower . get ( "zh-hans" )
44+ const zhHans = SUPPORTED_LOCALES_BY_LOWER . get ( "zh-hans" )
4545 return zhHans ?? null
4646 }
4747
48- const baseMatch = supportedLower . get ( base )
48+ const baseMatch = SUPPORTED_LOCALES_BY_LOWER . get ( base )
4949 return baseMatch ?? null
5050}
5151
@@ -83,6 +83,7 @@ function translateFrom(messages: Messages, key: string, params?: TranslateParams
8383
8484const [ globalRevision , setGlobalRevision ] = createSignal ( 0 )
8585let globalMessages : Messages = enMessages
86+ let globalLocale : Locale = "en"
8687
8788function getMessagesForLocale ( locale : Locale ) : Messages {
8889 return localeMessagesCache . get ( locale ) ?? enMessages
@@ -119,10 +120,12 @@ export async function preloadLocaleMessages(preferredLocale?: string | null): Pr
119120 const resolvedLocale = matchSupportedLocale ( preferredLocale ?? undefined ) ?? detectNavigatorLocale ( ) ?? "en"
120121 try {
121122 globalMessages = await loadLocaleMessages ( resolvedLocale )
123+ globalLocale = resolvedLocale
122124 setGlobalRevision ( ( value ) => value + 1 )
123125 return resolvedLocale
124126 } catch {
125127 globalMessages = enMessages
128+ globalLocale = "en"
126129 setGlobalRevision ( ( value ) => value + 1 )
127130 return "en"
128131 }
@@ -142,8 +145,8 @@ const I18nContext = createContext<I18nContextValue>()
142145
143146export const I18nProvider : ParentComponent = ( props ) => {
144147 const { preferences } = useConfig ( )
145- const [ detectedLocale , setDetectedLocale ] = createSignal < Locale > ( "en" )
146- const [ resolvedLocale , setResolvedLocale ] = createSignal < Locale > ( "en" )
148+ const [ detectedLocale , setDetectedLocale ] = createSignal < Locale > ( globalLocale )
149+ const [ resolvedLocale , setResolvedLocale ] = createSignal < Locale > ( globalLocale )
147150
148151 onMount ( ( ) => {
149152 const detected = detectNavigatorLocale ( )
@@ -181,6 +184,7 @@ export const I18nProvider: ParentComponent = (props) => {
181184 }
182185 setResolvedLocale ( "en" )
183186 globalMessages = enMessages
187+ globalLocale = "en"
184188 setGlobalRevision ( ( value ) => value + 1 )
185189 } )
186190
@@ -191,6 +195,7 @@ export const I18nProvider: ParentComponent = (props) => {
191195
192196 onCleanup ( ( ) => {
193197 globalMessages = enMessages
198+ globalLocale = "en"
194199 setGlobalRevision ( ( value ) => value + 1 )
195200 } )
196201
0 commit comments