‪TYPO3CMS  ‪main
TranslationService.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Psr\Http\Message\ServerRequestInterface;
35 
45 {
51  protected string ‪$languageKey = '';
52 
53  public function ‪__construct(
54  protected readonly ‪ConfigurationManagerInterface $configurationManager,
55  protected readonly ‪LanguageServiceFactory $languageServiceFactory,
56  protected readonly ‪FrontendInterface $runtimeCache,
57  protected readonly ‪Locales $locales
58  ) {}
59 
69  public function ‪translate(
70  $key,
71  array $arguments = null,
72  string $locallangPathAndFilename = null,
73  string $language = null,
74  $defaultValue = ''
75  ) {
76  $key = (string)$key;
77 
78  if ($locallangPathAndFilename) {
79  $key = $locallangPathAndFilename . ':' . $key;
80  }
81 
82  $keyParts = explode(':', $key);
83  if (str_starts_with($key, 'LLL:')) {
84  $locallangPathAndFilename = $keyParts[1] . ':' . $keyParts[2];
85  $key = $keyParts[3];
86  } elseif (‪PathUtility::isExtensionPath($key)) {
87  $locallangPathAndFilename = $keyParts[0] . ':' . $keyParts[1];
88  $key = $keyParts[2];
89  } elseif (count($keyParts) === 2) {
90  $locallangPathAndFilename = $keyParts[0];
91  $key = $keyParts[1];
92  }
93 
94  if ($language) {
95  $this->languageKey = $language;
96  }
97 
98  if ($this->languageKey === '' || $language !== null) {
99  $this->‪setLanguageKeys($language);
100  }
101  $languageService = $this->‪initializeLocalization($locallangPathAndFilename ?? '');
102  $resolvedLabel = $languageService->sL('LLL:' . $locallangPathAndFilename . ':' . $key);
103  $value = $resolvedLabel !== '' ? $resolvedLabel : null;
104 
105  // Check if a value was explicitly set to ""
106  $overrideLabels = static::loadTypoScriptLabels();
107  if ($value === null && isset($overrideLabels[$this->languageKey])) {
108  $value = '';
109  }
110 
111  if (is_array($arguments) && !empty($arguments) && $value !== null) {
112  $value = vsprintf($value, $arguments);
113  } elseif ($value === null) {
114  $value = $defaultValue;
115  }
116 
117  return $value;
118  }
119 
126  public function ‪translateValuesRecursive(array $array, array $translationFiles = []): array
127  {
128  $result = $array;
129  foreach ($result as $key => $value) {
130  if (is_array($value)) {
131  $result[$key] = $this->‪translateValuesRecursive($value, $translationFiles);
132  } else {
133  $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
134 
135  if (!empty($translationFiles)) {
136  foreach ($translationFiles as $translationFile) {
137  $translatedValue = $this->‪translate($value, null, $translationFile, null);
138  if (!empty($translatedValue)) {
139  $result[$key] = $translatedValue;
140  break;
141  }
142  }
143  } else {
144  $result[$key] = $this->‪translate($value, null, null, null, $value);
145  }
146  }
147  }
148  return $result;
149  }
150 
156  string $key,
157  array $arguments = null,
158  array $translationFiles = []
159  ): array {
160  $result = [];
161  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
162 
163  foreach ($this->locales->getActiveLanguages() as $language) {
164  $result[$language] = $key;
165  foreach ($translationFiles as $translationFile) {
166  $translatedValue = $this->‪translate($key, $arguments, $translationFile, $language, $key);
167  if ($translatedValue !== $key) {
168  $result[$language] = $translatedValue;
169  break;
170  }
171  }
172  }
173 
174  return $result;
175  }
176 
180  public function ‪translateFinisherOption(
181  ‪FormRuntime $formRuntime,
182  string $finisherIdentifier,
183  string $optionKey,
184  string $optionValue,
185  array $renderingOptions = []
186  ): string {
187  if (empty($finisherIdentifier)) {
188  throw new \InvalidArgumentException('The argument "finisherIdentifier" is empty', 1476216059);
189  }
190  if (empty($optionKey)) {
191  throw new \InvalidArgumentException('The argument "optionKey" is empty', 1476216060);
192  }
193 
194  if (in_array($optionKey, $renderingOptions['propertiesExcludedFromTranslation'] ?? [], true)) {
195  return $optionValue;
196  }
197 
198  $finisherIdentifier = preg_replace('/Finisher$/', '', $finisherIdentifier);
199  $translationFiles = $renderingOptions['translationFiles'] ?? [];
200  if (empty($translationFiles)) {
201  $translationFiles = $formRuntime->‪getRenderingOptions()['translation']['translationFiles'];
202  }
203 
204  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
205 
206  if (isset($renderingOptions['translatePropertyValueIfEmpty'])) {
207  $translatePropertyValueIfEmpty = (bool)$renderingOptions['translatePropertyValueIfEmpty'];
208  } else {
209  $translatePropertyValueIfEmpty = true;
210  }
211 
212  if (empty($optionValue) && !$translatePropertyValueIfEmpty) {
213  return $optionValue;
214  }
215 
216  $language = null;
217  if (isset($renderingOptions['language'])) {
218  $language = $renderingOptions['language'];
219  }
220 
221  try {
222  $arguments = ‪ArrayUtility::getValueByPath($renderingOptions['arguments'] ?? [], $optionKey, '.');
223  } catch (‪MissingArrayPathException $e) {
224  $arguments = [];
225  }
226 
227  $originalFormIdentifier = null;
228  if (isset($formRuntime->‪getRenderingOptions()['_originalIdentifier'])) {
229  $originalFormIdentifier = $formRuntime->‪getRenderingOptions()['_originalIdentifier'];
230  }
231 
232  $translationKeyChain = [];
233  foreach ($translationFiles as $translationFile) {
234  if (!empty($originalFormIdentifier)) {
235  $translationKeyChain[] = sprintf('%s:%s.finisher.%s.%s', $translationFile, $originalFormIdentifier, $finisherIdentifier, $optionKey);
236  }
237  $translationKeyChain[] = sprintf('%s:%s.finisher.%s.%s', $translationFile, $formRuntime->‪getIdentifier(), $finisherIdentifier, $optionKey);
238  $translationKeyChain[] = sprintf('%s:finisher.%s.%s', $translationFile, $finisherIdentifier, $optionKey);
239  }
240 
241  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
242  $translatedValue = $this->‪isEmptyTranslatedValue($translatedValue) ? $optionValue : $translatedValue;
243 
244  return $translatedValue;
245  }
246 
254  array $propertyParts,
255  ‪FormRuntime $formRuntime
256  ) {
257  if (empty($propertyParts)) {
258  throw new \InvalidArgumentException('The argument "propertyParts" is empty', 1476216007);
259  }
260 
261  $propertyType = 'properties';
262  $property = implode('.', $propertyParts);
263  $renderingOptions = $element->‪getRenderingOptions();
264 
265  if ($property === 'label') {
266  $defaultValue = $element->‪getLabel();
267  } else {
268  if ($element instanceof ‪FormElementInterface) {
269  try {
270  $defaultValue = ‪ArrayUtility::getValueByPath($element->getProperties(), $propertyParts, '.');
271  } catch (‪MissingArrayPathException $exception) {
272  $defaultValue = null;
273  }
274  } else {
275  $propertyType = 'renderingOptions';
276  try {
277  $defaultValue = ‪ArrayUtility::getValueByPath($renderingOptions, $propertyParts, '.');
278  } catch (‪MissingArrayPathException $exception) {
279  $defaultValue = null;
280  }
281  }
282  }
283 
284  if (isset($renderingOptions['translation']['translatePropertyValueIfEmpty'])) {
285  $translatePropertyValueIfEmpty = $renderingOptions['translation']['translatePropertyValueIfEmpty'];
286  } else {
287  $translatePropertyValueIfEmpty = true;
288  }
289 
290  if ($this->‪isEmptyTranslatedValue($defaultValue) && !$translatePropertyValueIfEmpty) {
291  return $defaultValue;
292  }
293 
294  $defaultValue = $this->‪isEmptyTranslatedValue($defaultValue) ? '' : $defaultValue;
295  $translationFiles = $renderingOptions['translation']['translationFiles'] ?? [];
296  if (empty($translationFiles)) {
297  $translationFiles = $formRuntime->‪getRenderingOptions()['translation']['translationFiles'];
298  }
299 
300  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
301 
302  $language = null;
303  if (isset($renderingOptions['translation']['language'])) {
304  $language = $renderingOptions['translation']['language'];
305  }
306 
307  try {
308  $arguments = ‪ArrayUtility::getValueByPath($renderingOptions['translation']['arguments'] ?? [], $propertyParts, '.');
309  } catch (‪MissingArrayPathException $e) {
310  $arguments = [];
311  }
312 
313  $originalFormIdentifier = null;
314  if (isset($formRuntime->‪getRenderingOptions()['_originalIdentifier'])) {
315  $originalFormIdentifier = $formRuntime->‪getRenderingOptions()['_originalIdentifier'];
316  }
317 
318  if ($property === 'options' && is_array($defaultValue)) {
319  foreach ($defaultValue as $optionValue => &$optionLabel) {
320  $translationKeyChain = [];
321  foreach ($translationFiles as $translationFile) {
322  if (!empty($originalFormIdentifier)) {
323  if ($element instanceof ‪FormRuntime) {
324  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $property, $optionValue);
325  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $property, $optionValue);
326  } else {
327  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->‪getIdentifier(), $propertyType, $property, $optionValue);
328  }
329  }
330  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $formRuntime->‪getIdentifier(), $element->‪getIdentifier(), $propertyType, $property, $optionValue);
331  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $element->‪getIdentifier(), $propertyType, $property, $optionValue);
332  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $element->‪getType(), $propertyType, $property, $optionValue);
333  }
334 
335  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
336  $optionLabel = $this->‪isEmptyTranslatedValue($translatedValue) ? $optionLabel : $translatedValue;
337  }
338  $translatedValue = $defaultValue;
339  } elseif ($property === 'fluidAdditionalAttributes' && is_array($defaultValue)) {
340  foreach ($defaultValue as $propertyName => &$propertyValue) {
341  $translationKeyChain = [];
342  foreach ($translationFiles as $translationFile) {
343  if (!empty($originalFormIdentifier)) {
344  if ($element instanceof ‪FormRuntime) {
345  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $propertyName);
346  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $propertyName);
347  } else {
348  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->‪getIdentifier(), $propertyType, $propertyName);
349  }
350  }
351  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $formRuntime->‪getIdentifier(), $element->‪getIdentifier(), $propertyType, $propertyName);
352  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->‪getIdentifier(), $propertyType, $propertyName);
353  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->‪getType(), $propertyType, $propertyName);
354  }
355 
356  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
357  $propertyValue = $this->‪isEmptyTranslatedValue($translatedValue) ? $propertyValue : $translatedValue;
358  }
359  $translatedValue = $defaultValue;
360  } else {
361  $translationKeyChain = [];
362  foreach ($translationFiles as $translationFile) {
363  if (!empty($originalFormIdentifier)) {
364  if ($element instanceof ‪FormRuntime) {
365  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $property);
366  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $property);
367  } else {
368  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->‪getIdentifier(), $propertyType, $property);
369  }
370  }
371  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $formRuntime->‪getIdentifier(), $element->‪getIdentifier(), $propertyType, $property);
372  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->‪getIdentifier(), $propertyType, $property);
373  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->‪getType(), $propertyType, $property);
374  }
375 
376  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
377  $translatedValue = $this->‪isEmptyTranslatedValue($translatedValue) ? $defaultValue : $translatedValue;
378  }
379 
380  return $translatedValue;
381  }
382 
389  int $code,
390  array $arguments,
391  string $defaultValue,
392  ‪FormRuntime $formRuntime
393  ): string {
394  if (empty($code)) {
395  throw new \InvalidArgumentException('The argument "code" is empty', 1489272978);
396  }
397 
398  $validationErrors = $element->getProperties()['validationErrorMessages'] ?? null;
399  if (is_array($validationErrors)) {
400  foreach ($validationErrors as $validationError) {
401  if ((int)$validationError['code'] === $code) {
402  return sprintf($validationError['message'], ...$arguments);
403  }
404  }
405  }
406 
407  $renderingOptions = $element->‪getRenderingOptions();
408  $translationFiles = $renderingOptions['translation']['translationFiles'] ?? [];
409  if (empty($translationFiles)) {
410  $translationFiles = $formRuntime->‪getRenderingOptions()['translation']['translationFiles'];
411  }
412 
413  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
414 
415  $language = null;
416  if (isset($renderingOptions['language'])) {
417  $language = $renderingOptions['language'];
418  }
419 
420  $originalFormIdentifier = null;
421  if (isset($formRuntime->‪getRenderingOptions()['_originalIdentifier'])) {
422  $originalFormIdentifier = $formRuntime->‪getRenderingOptions()['_originalIdentifier'];
423  }
424 
425  $translationKeyChain = [];
426  foreach ($translationFiles as $translationFile) {
427  if (!empty($originalFormIdentifier)) {
428  if ($element instanceof ‪FormRuntime) {
429  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $code);
430  $translationKeyChain[] = sprintf('%s:validation.error.%s.%s', $translationFile, $originalFormIdentifier, $code);
431  } else {
432  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $originalFormIdentifier, $element->‪getIdentifier(), $code);
433  }
434  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s', $translationFile, $originalFormIdentifier, $code);
435  }
436  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $formRuntime->‪getIdentifier(), $element->‪getIdentifier(), $code);
437  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s', $translationFile, $formRuntime->‪getIdentifier(), $code);
438  $translationKeyChain[] = sprintf('%s:validation.error.%s.%s', $translationFile, $element->‪getIdentifier(), $code);
439  $translationKeyChain[] = sprintf('%s:validation.error.%s', $translationFile, $code);
440  }
441 
442  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
443  $translatedValue = $this->‪isEmptyTranslatedValue($translatedValue) ? $defaultValue : $translatedValue;
444  return $translatedValue;
445  }
446 
450  public function ‪setLanguage(string ‪$languageKey)
451  {
452  $this->languageKey = ‪$languageKey;
453  }
454 
458  public function ‪getLanguage(): string
459  {
460  return ‪$this->languageKey;
461  }
462 
466  protected function ‪processTranslationChain(
467  array $translationKeyChain,
468  string $language = null,
469  array $arguments = null
470  ) {
471  $translatedValue = null;
472  foreach ($translationKeyChain as $translationKey) {
473  $translatedValue = $this->‪translate($translationKey, $arguments, null, $language);
474  if (!$this->‪isEmptyTranslatedValue($translatedValue)) {
475  break;
476  }
477  }
478  return $translatedValue;
479  }
480 
481  protected function ‪initializeLocalization(string $locallangPathAndFilename): ‪LanguageService
482  {
483  $languageService = $this->‪buildLanguageService($this->languageKey, $locallangPathAndFilename);
484 
485  if (!empty($locallangPathAndFilename)) {
486  $overrideLabels = $this->‪loadTypoScriptLabels();
487  if ($overrideLabels !== []) {
488  $languageService->overrideLabels($locallangPathAndFilename, $overrideLabels);
489  }
490  }
491  return $languageService;
492  }
493 
494  protected function ‪buildLanguageService(string ‪$languageKey, $languageFilePath): ‪LanguageService
495  {
496  $languageKeyHash = sha1(‪$languageKey . '_' . $languageFilePath);
497  if (!$this->runtimeCache->get($languageKeyHash)) {
498  $languageService = $this->languageServiceFactory->create(‪$languageKey);
499  if ($languageFilePath) {
500  $languageService->includeLLFile($languageFilePath);
501  }
502  $this->runtimeCache->set($languageKeyHash, $languageService);
503  }
504  return $this->runtimeCache->get($languageKeyHash);
505  }
506 
510  protected function ‪setLanguageKeys(?string $language): void
511  {
512  if ($language) {
513  $this->languageKey = $language;
514  } else {
515  $this->languageKey = 'default';
516  if ((‪$GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface
517  && ‪ApplicationType::fromRequest(‪$GLOBALS['TYPO3_REQUEST'])->isFrontend()
518  ) {
519  $this->languageKey = $this->‪getCurrentSiteLanguage()->getTypo3Language();
520  } elseif (!empty(‪$GLOBALS['BE_USER']->user['lang'])) {
521  $this->languageKey = ‪$GLOBALS['BE_USER']->user['lang'];
522  }
523  }
524  }
525 
531  protected function ‪loadTypoScriptLabels(): array
532  {
533  $frameworkConfiguration = $this->configurationManager->getConfiguration(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, 'form');
534  if (!is_array($frameworkConfiguration['_LOCAL_LANG'] ?? false)) {
535  return [];
536  }
537  $finalLabels = [];
538  foreach ($frameworkConfiguration['_LOCAL_LANG'] as ‪$languageKey => $labels) {
539  if (!is_array($labels)) {
540  continue;
541  }
542  foreach ($labels as $labelKey => $labelValue) {
543  if (is_string($labelValue)) {
544  $finalLabels[‪$languageKey][$labelKey] = $labelValue;
545  } elseif (is_array($labelValue)) {
546  $labelValue = $this->‪flattenTypoScriptLabelArray($labelValue, $labelKey);
547  foreach ($labelValue as $key => $value) {
548  $finalLabels[‪$languageKey][$key] = $value;
549  }
550  }
551  }
552  }
553  return $finalLabels;
554  }
555 
567  protected function ‪flattenTypoScriptLabelArray(array $labelValues, string $parentKey = ''): array
568  {
569  $result = [];
570  foreach ($labelValues as $key => $labelValue) {
571  if (!empty($parentKey)) {
572  $key = $parentKey . '.' . $key;
573  }
574  if (is_array($labelValue)) {
575  $labelValue = $this->‪flattenTypoScriptLabelArray($labelValue, $key);
576  $result = array_merge($result, $labelValue);
577  } else {
578  $result[$key] = $labelValue;
579  }
580  }
581  return $result;
582  }
583 
587  protected function ‪sortArrayWithIntegerKeysDescending(array $array): array
588  {
589  if (count(array_filter(array_keys($array), 'is_string')) === 0) {
590  krsort($array);
591  }
592  return $array;
593  }
594 
605  protected function ‪isEmptyTranslatedValue(mixed $translatedValue): bool
606  {
607  if ($translatedValue === null) {
608  return true;
609  }
610 
611  if (is_string($translatedValue)) {
612  return trim($translatedValue) === '';
613  }
614 
615  if (is_bool($translatedValue)) {
616  return !$translatedValue;
617  }
618 
619  if (is_array($translatedValue)) {
620  return $translatedValue === [];
621  }
622 
623  return false;
624  }
625 
630  {
631  if (‪$GLOBALS['TYPO3_REQUEST'] instanceof ServerRequestInterface) {
632  return ‪$GLOBALS['TYPO3_REQUEST']->getAttribute('language', null);
633  }
634  return null;
635  }
636 }
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormRuntime.php:106
‪TYPO3\CMS\Form\Service\TranslationService\setLanguage
‪setLanguage(string $languageKey)
Definition: TranslationService.php:450
‪TYPO3\CMS\Form\Service\TranslationService\translateFormElementValue
‪string array translateFormElementValue(RootRenderableInterface $element, array $propertyParts, FormRuntime $formRuntime)
Definition: TranslationService.php:252
‪TYPO3\CMS\Core\Utility\PathUtility\isExtensionPath
‪static isExtensionPath(string $path)
Definition: PathUtility.php:117
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime\getRenderingOptions
‪array getRenderingOptions()
Definition: FormRuntime.php:950
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:27
‪TYPO3\CMS\Form\Service\TranslationService
Definition: TranslationService.php:45
‪TYPO3\CMS\Form\Service\TranslationService\isEmptyTranslatedValue
‪isEmptyTranslatedValue(mixed $translatedValue)
Definition: TranslationService.php:605
‪TYPO3\CMS\Form\Service\TranslationService\sortArrayWithIntegerKeysDescending
‪sortArrayWithIntegerKeysDescending(array $array)
Definition: TranslationService.php:587
‪TYPO3\CMS\Core\Utility\Exception\MissingArrayPathException
Definition: MissingArrayPathException.php:27
‪TYPO3\CMS\Form\Service\TranslationService\buildLanguageService
‪buildLanguageService(string $languageKey, $languageFilePath)
Definition: TranslationService.php:494
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Core\Localization\Locales
Definition: Locales.php:36
‪TYPO3\CMS\Form\Service\TranslationService\processTranslationChain
‪string null processTranslationChain(array $translationKeyChain, string $language=null, array $arguments=null)
Definition: TranslationService.php:466
‪TYPO3\CMS\Form\Service\TranslationService\initializeLocalization
‪initializeLocalization(string $locallangPathAndFilename)
Definition: TranslationService.php:481
‪TYPO3\CMS\Form\Service\TranslationService\translateFinisherOption
‪translateFinisherOption(FormRuntime $formRuntime, string $finisherIdentifier, string $optionKey, string $optionValue, array $renderingOptions=[])
Definition: TranslationService.php:180
‪TYPO3\CMS\Form\Service\TranslationService\translateValuesRecursive
‪array translateValuesRecursive(array $array, array $translationFiles=[])
Definition: TranslationService.php:126
‪TYPO3\CMS\Form\Service
Definition: DatabaseService.php:18
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface\CONFIGURATION_TYPE_FRAMEWORK
‪const CONFIGURATION_TYPE_FRAMEWORK
Definition: ConfigurationManagerInterface.php:29
‪TYPO3\CMS\Core\Utility\ArrayUtility\getValueByPath
‪static getValueByPath(array $array, array|string $path, string $delimiter='/')
Definition: ArrayUtility.php:176
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage
Definition: SiteLanguage.php:27
‪TYPO3\CMS\Form\Domain\Model\FormElements\FormElementInterface
Definition: FormElementInterface.php:40
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface
Definition: RootRenderableInterface.php:31
‪TYPO3\CMS\Form\Service\TranslationService\$languageKey
‪string $languageKey
Definition: TranslationService.php:51
‪TYPO3\CMS\Form\Service\TranslationService\translateFormElementError
‪translateFormElementError(RootRenderableInterface $element, int $code, array $arguments, string $defaultValue, FormRuntime $formRuntime)
Definition: TranslationService.php:387
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getRenderingOptions
‪array getRenderingOptions()
‪TYPO3\CMS\Form\Service\TranslationService\setLanguageKeys
‪setLanguageKeys(?string $language)
Definition: TranslationService.php:510
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getType
‪getType()
‪TYPO3\CMS\Form\Service\TranslationService\translate
‪mixed translate( $key, array $arguments=null, string $locallangPathAndFilename=null, string $language=null, $defaultValue='')
Definition: TranslationService.php:69
‪TYPO3\CMS\Form\Service\TranslationService\flattenTypoScriptLabelArray
‪array flattenTypoScriptLabelArray(array $labelValues, string $parentKey='')
Definition: TranslationService.php:567
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getIdentifier
‪getIdentifier()
‪TYPO3\CMS\Form\Service\TranslationService\getCurrentSiteLanguage
‪getCurrentSiteLanguage()
Definition: TranslationService.php:629
‪TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
Definition: FrontendInterface.php:22
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:26
‪TYPO3\CMS\Form\Service\TranslationService\loadTypoScriptLabels
‪loadTypoScriptLabels()
Definition: TranslationService.php:531
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Http\fromRequest
‪@ fromRequest
Definition: ApplicationType.php:66
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:46
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime\getIdentifier
‪string getIdentifier()
Definition: FormRuntime.php:698
‪TYPO3\CMS\Form\Service\TranslationService\translateToAllBackendLanguages
‪array translateToAllBackendLanguages(string $key, array $arguments=null, array $translationFiles=[])
Definition: TranslationService.php:155
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getLabel
‪getLabel()
‪TYPO3\CMS\Form\Service\TranslationService\getLanguage
‪getLanguage()
Definition: TranslationService.php:458
‪TYPO3\CMS\Form\Service\TranslationService\__construct
‪__construct(protected readonly ConfigurationManagerInterface $configurationManager, protected readonly LanguageServiceFactory $languageServiceFactory, protected readonly FrontendInterface $runtimeCache, protected readonly Locales $locales)
Definition: TranslationService.php:53
‪TYPO3\CMS\Core\Http\ApplicationType
‪ApplicationType
Definition: ApplicationType.php:55