@@ -9,6 +9,33 @@ class PfFooter extends HTMLElement {
99
1010 connectedCallback ( ) {
1111 this . render ( ) ;
12+ this . initEventListeners ( ) ;
13+ }
14+
15+ initEventListeners ( ) {
16+ // Listen for language changes
17+ window . addEventListener ( 'language-changed' , ( ) => {
18+ console . log ( 'pf-footer: Language changed event received' ) ;
19+ this . translateElements ( ) ;
20+ } ) ;
21+
22+ // Listen for i18n ready event
23+ window . addEventListener ( 'i18n-ready' , ( ) => {
24+ console . log ( 'pf-footer: i18n ready event received' ) ;
25+ this . translateElements ( ) ;
26+ } ) ;
27+
28+ // Listen for pre-navigation event to translate before transition starts
29+ document . addEventListener ( 'pre-navigation' , ( ) => {
30+ console . log ( 'pf-footer: Pre-navigation event received' ) ;
31+ this . translateElements ( ) ;
32+ } ) ;
33+
34+ // Listen for router transitions
35+ document . addEventListener ( 'spa-transition-end' , ( ) => {
36+ console . log ( 'pf-footer: SPA transition end event received' ) ;
37+ this . translateElements ( ) ;
38+ } ) ;
1239 }
1340
1441 render ( ) {
@@ -83,38 +110,80 @@ class PfFooter extends HTMLElement {
83110 <div class="footer">
84111 <div class="footer-content">
85112 <div class="footer-section">
86- <h3>convert2doc</h3>
113+ <h3 data-i18n="app_name" >convert2doc</h3>
87114 <ul class="footer-links">
88- <li><a href="/">Home</a></li>
89- <li><a href="/api-docs">API Documentation</a></li>
90- <li><a href="/subscription">Pricing</a></li>
115+ <li><a href="/" data-i18n="footer.home" >Home</a></li>
116+ <li><a href="/api-docs" data-i18n="footer.api_docs" >API Documentation</a></li>
117+ <li><a href="/subscription" data-i18n="footer.pricing" >Pricing</a></li>
91118 </ul>
92119 </div>
93120
94121 <div class="footer-section">
95- <h3>Resources</h3>
122+ <h3 data-i18n="footer.resources" >Resources</h3>
96123 <ul class="footer-links">
97- <li><a href="/api-keys">API Keys</a></li>
98- <li><a href="https://github.com/profullstack/pdf" target="_blank">GitHub</a></li>
99- <li><a href="mailto:[email protected] ">Support</a></li> 124+ <li><a href="/api-keys" data-i18n="footer.api_keys" >API Keys</a></li>
125+ <li><a href="https://github.com/profullstack/pdf" target="_blank" data-i18n="footer.github" >GitHub</a></li>
126+ <li><a href="mailto:[email protected] " data-i18n="footer.support" >Support</a></li> 100127 </ul>
101128 </div>
102129
103130 <div class="footer-section">
104- <h3>Legal</h3>
131+ <h3 data-i18n="footer.legal" >Legal</h3>
105132 <ul class="footer-links">
106- <li><a href="/terms">Terms of Service</a></li>
107- <li><a href="/privacy">Privacy Policy</a></li>
108- <li><a href="/refund">Refund Policy</a></li>
133+ <li><a href="/terms" data-i18n="footer.terms" >Terms of Service</a></li>
134+ <li><a href="/privacy" data-i18n="footer.privacy" >Privacy Policy</a></li>
135+ <li><a href="/refund" data-i18n="footer.refund" >Refund Policy</a></li>
109136 </ul>
110137 </div>
111138 </div>
112139
113140 <div class="copyright">
114- © ${ year } Profullstack, Inc. All rights reserved.
141+ © ${ year } <span data-i18n="footer.company_name"> Profullstack, Inc.</span> <span data-i18n="footer.all_rights_reserved"> All rights reserved.</span>
115142 </div>
116143 </div>
117144 ` ;
145+
146+ // Translate elements after rendering
147+ this . translateElements ( ) ;
148+ }
149+
150+ /**
151+ * Translate elements with data-i18n attributes in the shadow DOM
152+ */
153+ translateElements ( ) {
154+ console . log ( 'pf-footer: Translating elements in shadow DOM' ) ;
155+
156+ // Check if there are any elements to translate
157+ const elementsToTranslate = this . shadowRoot . querySelectorAll ( '[data-i18n]' ) ;
158+ if ( elementsToTranslate . length === 0 ) {
159+ console . log ( 'pf-footer: No elements with data-i18n attribute found' ) ;
160+ return ;
161+ }
162+
163+ // Check if window.app._t is available (faster than importing)
164+ if ( window . app && window . app . _t ) {
165+ console . log ( 'pf-footer: Using window.app._t for translation' ) ;
166+ elementsToTranslate . forEach ( element => {
167+ const key = element . getAttribute ( 'data-i18n' ) ;
168+ const translated = window . app . _t ( key ) ;
169+ element . textContent = translated ;
170+ console . log ( `pf-footer: Translated "${ key } " to "${ translated } "` ) ;
171+ } ) ;
172+ return ;
173+ }
174+
175+ // Fallback to importing the translation function
176+ console . log ( 'pf-footer: Importing i18n module for translation' ) ;
177+ import ( '../i18n.js' ) . then ( ( { _t } ) => {
178+ elementsToTranslate . forEach ( element => {
179+ const key = element . getAttribute ( 'data-i18n' ) ;
180+ const translated = _t ( key ) ;
181+ element . textContent = translated ;
182+ console . log ( `pf-footer: Translated "${ key } " to "${ translated } "` ) ;
183+ } ) ;
184+ } ) . catch ( error => {
185+ console . error ( 'Error importing i18n module:' , error ) ;
186+ } ) ;
118187 }
119188}
120189
0 commit comments