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