88use TYPO3 \CMS \Core \Messaging \FlashMessage ;
99use TYPO3 \CMS \Core \Messaging \FlashMessageService ;
1010use TYPO3 \CMS \Core \Utility \GeneralUtility ;
11- use TYPO3 \ CMS \ Extbase \ Object \ ObjectManager ;
11+ use WebVision \ WvDeepltranslate \ Domain \ Dto \ TranslateOptions ;
1212use WebVision \WvDeepltranslate \Domain \Repository \PageRepository ;
13- use WebVision \WvDeepltranslate \Domain \Repository \SettingsRepository ;
1413use WebVision \WvDeepltranslate \Exception \LanguageIsoCodeNotFoundException ;
1514use WebVision \WvDeepltranslate \Exception \LanguageRecordNotFoundException ;
15+ use WebVision \WvDeepltranslate \Resolver \RichtextAllowTagsResolver ;
1616use WebVision \WvDeepltranslate \Service \DeeplService ;
1717use WebVision \WvDeepltranslate \Service \GoogleTranslateService ;
1818use WebVision \WvDeepltranslate \Service \LanguageService ;
@@ -24,31 +24,31 @@ class TranslateHook
2424
2525 protected GoogleTranslateService $ googleService ;
2626
27- protected SettingsRepository $ deeplSettingsRepository ;
28-
2927 protected PageRepository $ pageRepository ;
3028
3129 private LanguageService $ languageService ;
3230
3331 public function __construct (
34- ?SettingsRepository $ settingsRepository = null ,
3532 ?PageRepository $ pageRepository = null ,
3633 ?DeeplService $ deeplService = null ,
37- ?GoogleTranslateService $ googleService = null
34+ ?GoogleTranslateService $ googleService = null ,
35+ ?LanguageService $ languageService = null
3836 ) {
39- $ objectManager = GeneralUtility::makeInstance (ObjectManager::class);
40- $ this ->deeplSettingsRepository = $ settingsRepository ?? $ objectManager ->get (SettingsRepository::class);
41- $ this ->deeplService = $ deeplService ?? $ objectManager ->get (DeeplService::class);
42- $ this ->googleService = $ googleService ?? $ objectManager ->get (GoogleTranslateService::class);
37+ $ this ->deeplService = $ deeplService ?? GeneralUtility::makeInstance (DeeplService::class);
4338 $ this ->pageRepository = $ pageRepository ?? GeneralUtility::makeInstance (PageRepository::class);
44- $ this ->languageService = GeneralUtility::makeInstance (LanguageService::class);
39+ $ this ->languageService = $ languageService ?? GeneralUtility::makeInstance (LanguageService::class);
40+ $ this ->googleService = $ googleService ?? GeneralUtility::makeInstance (GoogleTranslateService::class);
4541 }
4642
4743 /**
4844 * @param array{uid: int} $languageRecord
4945 */
50- public function processTranslateTo_copyAction (string &$ content , array $ languageRecord , DataHandler $ dataHandler ): string
51- {
46+ public function processTranslateTo_copyAction (
47+ string &$ content ,
48+ array $ languageRecord ,
49+ DataHandler $ dataHandler ,
50+ string $ columnName
51+ ): string {
5252 $ tableName = '' ;
5353 $ currentRecordId = '' ;
5454
@@ -62,12 +62,7 @@ public function processTranslateTo_copyAction(string &$content, array $languageR
6262 break ;
6363 }
6464
65- if (!isset ($ cmdmap ['localization ' ]['custom ' ]['srcLanguageId ' ])) {
66- $ cmdmap ['localization ' ]['custom ' ]['srcLanguageId ' ] = '' ;
67- }
68-
6965 $ customMode = $ cmdmap ['localization ' ]['custom ' ]['mode ' ] ?? null ;
70- [$ sourceLanguage ,] = explode ('- ' , (string )$ cmdmap ['localization ' ]['custom ' ]['srcLanguageId ' ]);
7166
7267 //translation mode set to deepl or google translate
7368 if ($ customMode === null ) {
@@ -79,21 +74,28 @@ public function processTranslateTo_copyAction(string &$content, array $languageR
7974 $ translatedContent = '' ;
8075 $ targetLanguageRecord = [];
8176
77+ $ translateOptions = GeneralUtility::makeInstance (TranslateOptions::class);
78+ $ richtextAllowTagsResolver = GeneralUtility::makeInstance (RichtextAllowTagsResolver::class);
79+ $ translateOptions ->setSplittingTags (
80+ $ richtextAllowTagsResolver ->resolve ($ tableName , $ currentRecordId , $ columnName )
81+ );
82+
8283 try {
8384 $ sourceLanguageRecord = $ this ->languageService ->getSourceLanguage (
8485 $ siteInformation ['site ' ]
8586 );
87+ $ translateOptions ->setSourceLanguage ($ sourceLanguageRecord ['language_isocode ' ]);
8688
8789 $ targetLanguageRecord = $ this ->languageService ->getTargetLanguage (
8890 $ siteInformation ['site ' ],
8991 (int )$ languageRecord ['uid ' ]
9092 );
93+ $ translateOptions ->setTargetLanguage ($ targetLanguageRecord ['language_isocode ' ]);
9194
9295 $ translatedContent = $ this ->translateContent (
9396 $ content ,
94- $ targetLanguageRecord ,
97+ $ translateOptions ,
9598 $ customMode ,
96- $ sourceLanguageRecord
9799 );
98100 } catch (LanguageIsoCodeNotFoundException |LanguageRecordNotFoundException $ e ) {
99101 $ flashMessage = GeneralUtility::makeInstance (
@@ -123,22 +125,17 @@ public function processTranslateTo_copyAction(string &$content, array $languageR
123125
124126 /**
125127 * These logics were outsourced to test them and later to resolve them in a service
126- *
127- * @param array{uid: int, language_isocode: string} $targetLanguageRecord
128- * @param array{uid: int, language_isocode: string} $sourceLanguageRecord
129128 */
130129 public function translateContent (
131130 string $ content ,
132- array $ targetLanguageRecord ,
133- string $ customMode ,
134- array $ sourceLanguageRecord
131+ TranslateOptions $ translateOptions ,
132+ string $ customMode
135133 ): string {
136134 // mode deepl
137135 if ($ customMode == 'deepl ' ) {
138136 $ response = $ this ->deeplService ->translateRequest (
139137 $ content ,
140- $ targetLanguageRecord ['language_isocode ' ],
141- $ sourceLanguageRecord ['language_isocode ' ]
138+ $ translateOptions
142139 );
143140
144141 if (!empty ($ response ) && isset ($ response ['translations ' ])) {
@@ -152,8 +149,8 @@ public function translateContent(
152149 } //mode google
153150 elseif ($ customMode == 'google ' ) {
154151 $ response = $ this ->googleService ->translate (
155- $ sourceLanguageRecord [ ' language_isocode ' ] ,
156- $ targetLanguageRecord [ ' language_isocode ' ] ,
152+ $ translateOptions -> getSourceLanguage () ,
153+ $ translateOptions -> getTargetLanguage () ,
157154 $ content
158155 );
159156
0 commit comments