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