@@ -3,7 +3,8 @@ import { useState, useEffect } from "preact/hooks"
33import MailchimpSubscribe from "react-mailchimp-subscribe"
44import SubscribeSvg from "~/assets/svgs/footer/subscribe.svg?react"
55import { clsx } from "~/lib"
6- import i18next , { changeLanguage , t } from "i18next"
6+ import { t } from "i18next"
7+ import { useI18nReady } from "~/hooks/useI18nReady"
78
89import EmailInput from "./EmailInput.tsx"
910import styles from "./Subscribe.module.css"
@@ -19,58 +20,7 @@ export default function Subscribe(props) {
1920 const [ email , setEmail ] = useState ( "" )
2021 const [ customMessage , setCustomMessage ] = useState ( "" )
2122 const [ emailValid , setEmailValid ] = useState ( false )
22- const [ isReady , setIsReady ] = useState ( false )
23-
24- useEffect ( ( ) => {
25- const ensureResourcesLoaded = async ( ) => {
26- try {
27- // Wait for i18next to be initialized
28- if ( ! i18next . isInitialized ) {
29- await new Promise ( ( resolve ) => {
30- const handler = ( ) => {
31- i18next . off ( "initialized" , handler )
32- resolve ( undefined )
33- }
34- i18next . on ( "initialized" , handler )
35- } )
36- }
37-
38- // changeLanguage will wait for resources to load if they're not already loaded
39- if ( props . lang && i18next . language !== props . lang ) {
40- await changeLanguage ( props . lang )
41- }
42-
43- // Double-check that resources are actually loaded
44- const targetLang = props . lang || i18next . language || "en"
45- if ( i18next . hasResourceBundle ( targetLang , "translation" ) ) {
46- setIsReady ( true )
47- } else {
48- // Wait for resources to be loaded
49- await new Promise ( ( resolve ) => {
50- const checkResources = ( ) => {
51- if ( i18next . hasResourceBundle ( targetLang , "translation" ) ) {
52- i18next . off ( "loaded" , checkResources )
53- resolve ( undefined )
54- }
55- }
56- i18next . on ( "loaded" , checkResources )
57- // Check immediately in case resources are already loaded
58- if ( i18next . hasResourceBundle ( targetLang , "translation" ) ) {
59- i18next . off ( "loaded" , checkResources )
60- resolve ( undefined )
61- }
62- } )
63- setIsReady ( true )
64- }
65- } catch ( error ) {
66- // If something goes wrong, still set ready to avoid blocking the UI
67- console . error ( "Error loading i18next resources:" , error )
68- setIsReady ( true )
69- }
70- }
71-
72- ensureResourcesLoaded ( )
73- } , [ props . lang ] )
23+ const isReady = useI18nReady ( props . lang )
7424
7525 useEffect ( ( ) => {
7626 setCustomMessage ( "" )
0 commit comments