@@ -538,7 +538,8 @@ export class ThemeSelectionScreen extends ApplyConfiguratorScreen {
538538        const  proms  =  [ ] ; 
539539        this . uiService . block ( { delay : 700 } ) ; 
540540        themes . forEach ( ( theme ,  idx )  =>  { 
541-             const  svgEl  =  new  DOMParser ( ) . parseFromString ( theme . svg ,  "image/svg+xml" ) . documentElement ; 
541+             const  parsedSvg  =  new  DOMParser ( ) . parseFromString ( theme . svg ,  "image/svg+xml" ) ; 
542+             const  svgEl  =  this . translateSVG ( parsedSvg ) . documentElement ; 
542543            for  ( const  imgEl  of  svgEl . querySelectorAll ( "image" ) )  { 
543544                proms . push ( new  Promise ( ( resolve ,  reject )  =>  { 
544545                    imgEl . addEventListener ( "load" ,  ( )  =>  { 
@@ -558,6 +559,157 @@ export class ThemeSelectionScreen extends ApplyConfiguratorScreen {
558559        } ) ; 
559560    } 
560561
562+     translateSVG ( doc )  { 
563+         doc . querySelectorAll ( "text" ) . forEach ( ( elem )  =>  { 
564+             const  sanitizedTextContent  =  elem . textContent 
565+                 . trim ( ) 
566+                 . split ( "\n" ) 
567+                 . map ( ( word )  =>  word . trim ( ) ) ; 
568+             var  translatedTextContent  =  sanitizedTextContent . join ( " " ) ; 
569+             switch  ( translatedTextContent )  { 
570+                 case  "Welcome" :
571+                     translatedTextContent  =  _t ( "Welcome" ) ; 
572+                     break ; 
573+                 case  "Welcome Message" :
574+                     translatedTextContent  =  _t ( "Welcome Message" ) ; 
575+                     break ; 
576+                 case  "A Welcome Message" :
577+                     translatedTextContent  =  _t ( "A Welcome Message" ) ; 
578+                     break ; 
579+                 case  "A Welcoming Message" :
580+                     translatedTextContent  =  _t ( "A Welcoming Message" ) ; 
581+                     break ; 
582+                 case  "Title" :
583+                     translatedTextContent  =  _t ( "Title" ) ; 
584+                     break ; 
585+                 case  "Welcome Title" :
586+                     translatedTextContent  =  _t ( "Welcome Title" ) ; 
587+                     break ; 
588+                 case  "Second Title" :
589+                     translatedTextContent  =  _t ( "Second Title" ) ; 
590+                     break ; 
591+                 case  "Discover" :
592+                     translatedTextContent  =  _t ( "Discover" ) ; 
593+                     break ; 
594+                 case  "Section Title" :
595+                     translatedTextContent  =  _t ( "Section Title" ) ; 
596+                     break ; 
597+                 case  "Section longer title" :
598+                     translatedTextContent  =  _t ( "Section longer title" ) ; 
599+                     break ; 
600+                 case  "A longer section title" :
601+                     translatedTextContent  =  _t ( "A longer section title" ) ; 
602+                     break ; 
603+                 case  "Large section title" :
604+                     translatedTextContent  =  _t ( "Large section title" ) ; 
605+                     break ; 
606+                 case  "Entry Title" :
607+                     translatedTextContent  =  _t ( "Entry Title" ) ; 
608+                     break ; 
609+                 case  "Team Member" :
610+                     translatedTextContent  =  _t ( "Team Member" ) ; 
611+                     break ; 
612+                 case  "A Section Title" :
613+                     translatedTextContent  =  _t ( "A Section Title" ) ; 
614+                     break ; 
615+                 case  "A Very Long Title" :
616+                     translatedTextContent  =  _t ( "A Very Long Title" ) ; 
617+                     break ; 
618+                 case  "A Big Title" :
619+                     translatedTextContent  =  _t ( "A Big Title" ) ; 
620+                     break ; 
621+                 case  "A Very Long Subtitle" :
622+                     translatedTextContent  =  _t ( "A Very Long Subtitle" ) ; 
623+                     break ; 
624+                 case  "Block Title" :
625+                     translatedTextContent  =  _t ( "Block Title" ) ; 
626+                     break ; 
627+                 case  "BLOCK" :
628+                     translatedTextContent  =  _t ( "BLOCK" ) ; 
629+                     break ; 
630+                 case  "TITLE" :
631+                     translatedTextContent  =  _t ( "TITLE" ) ; 
632+                     break ; 
633+                 case  "Feature #01" :
634+                     translatedTextContent  =  _t ( "Feature" )  +  " #01" ; 
635+                     break ; 
636+                 case  "Feature #02" :
637+                     translatedTextContent  =  _t ( "Feature" )  +  " #02" ; 
638+                     break ; 
639+                 case  "Feature #03" :
640+                     translatedTextContent  =  _t ( "Feature" )  +  " #03" ; 
641+                     break ; 
642+                 case  "Section Entry" :
643+                     translatedTextContent  =  _t ( "Section Entry" ) ; 
644+                     break ; 
645+                 case  "Contact" :
646+                     translatedTextContent  =  _t ( "Contact" ) ; 
647+                     break ; 
648+                 case  "Contact Us" :
649+                     translatedTextContent  =  _t ( "Contact Us" ) ; 
650+                     break ; 
651+                 case  "Contact Me" :
652+                     translatedTextContent  =  _t ( "Contact Me" ) ; 
653+                     break ; 
654+                 case  "Card Title" :
655+                     translatedTextContent  =  _t ( "Card Title" ) ; 
656+                     break ; 
657+                 case  "Call-To-Action Title" :
658+                     translatedTextContent  =  _t ( "Call-To-Action Title" ) ; 
659+                     break ; 
660+                 case  "Subtitle #01" :
661+                     translatedTextContent  =  _t ( "Subtitle" )  +  " #01" ; 
662+                     break ; 
663+                 case  "Subtitle #02" :
664+                     translatedTextContent  =  _t ( "Subtitle" )  +  " #02" ; 
665+                     break ; 
666+                 case  "“A quote about your services”" :
667+                     translatedTextContent  =  "“"  +  _t ( "A quote about your services" )  +  "”" ; 
668+                     break ; 
669+                 case  "LOGO" :
670+                     translatedTextContent  =  _t ( "LOGO" ) ; 
671+                     break ; 
672+             } 
673+ 
674+             /* 
675+              * This code handles translating multiline phrases into languages 
676+              * whose corresponding phrases have more words, while keeping the 
677+              * same amount of lines 
678+              * 
679+              * Example: translating     Welcome     into    Messaggio di 
680+              *                          Message             Benvenuto 
681+              * 
682+              * starting phrase = 2 lines, 2 words 
683+              * translated phrase = 2 lines, 3 words 
684+              */ 
685+             if  ( sanitizedTextContent . length  >  1 )  { 
686+                 const  distributedTranslatedTextContent  =  [ ] ; 
687+                 const  splitTranslatedTextContent  =  translatedTextContent . split ( / \s / ) ; 
688+                 const  wordsPerLine  =  Math . ceil ( 
689+                     splitTranslatedTextContent . length  /  sanitizedTextContent . length 
690+                 ) ; 
691+ 
692+                 for  ( let  i  =  0 ;  i  <  splitTranslatedTextContent . length ;  i  +=  wordsPerLine )  { 
693+                     distributedTranslatedTextContent . push ( 
694+                         splitTranslatedTextContent . slice ( i ,  i  +  wordsPerLine ) . join ( " " ) 
695+                     ) ; 
696+                 } 
697+ 
698+                 distributedTranslatedTextContent . forEach ( ( word ,  index )  =>  { 
699+                     elem . querySelectorAll ( "tspan" ) [ index ] . textContent  =  word ; 
700+                 } ) ; 
701+             }  else  { 
702+                 const  tspanEl  =  elem . querySelector ( "tspan" ) ; 
703+                 if  ( tspanEl )  { 
704+                     tspanEl . textContent  =  translatedTextContent ; 
705+                 }  else  { 
706+                     elem . textContent  =  translatedTextContent ; 
707+                 } 
708+             } 
709+         } ) ; 
710+         return  doc ; 
711+     } 
712+ 
561713    async  chooseTheme ( themeName )  { 
562714        await  this . applyConfigurator ( themeName ) ; 
563715    } 
0 commit comments