‪TYPO3CMS  11.5
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 ‪$LOCAL_LANG = [];
52 
61  protected ‪$LOCAL_LANG_UNSET = [];
62 
68  protected ‪$languageKey;
69 
76 
78 
80  {
81  $this->configurationManager = ‪$configurationManager;
82  }
83 
91  public static function ‪getInstance(): self
92  {
93  trigger_error(__CLASS__ . '::getInstance() will be removed in TYPO3 v12.0. Use Dependency Injection or GeneralUtility::makeInstance() if DI is not possible.', E_USER_DEPRECATED);
94  return GeneralUtility::makeInstance(self::class);
95  }
96 
108  public function ‪translate(
109  $key,
110  array $arguments = null,
111  string $locallangPathAndFilename = null,
112  string $language = null,
113  $defaultValue = ''
114  ) {
115  $value = null;
116  $key = (string)$key;
117 
118  if ($locallangPathAndFilename) {
119  $key = $locallangPathAndFilename . ':' . $key;
120  }
121 
122  $keyParts = explode(':', $key);
123  if (str_starts_with($key, 'LLL:')) {
124  $locallangPathAndFilename = $keyParts[1] . ':' . $keyParts[2];
125  $key = $keyParts[3];
126  } elseif (‪PathUtility::isExtensionPath($key)) {
127  $locallangPathAndFilename = $keyParts[0] . ':' . $keyParts[1];
128  $key = $keyParts[2];
129  } else {
130  if (count($keyParts) === 2) {
131  $locallangPathAndFilename = $keyParts[0];
132  $key = $keyParts[1];
133  }
134  }
135 
136  if ($language) {
137  $this->languageKey = $language;
138  }
139 
140  $this->‪initializeLocalization($locallangPathAndFilename ?? '');
141 
142  // The "from" charset of csConv() is only set for strings from TypoScript via _LOCAL_LANG
143  if (!empty($this->LOCAL_LANG[$this->languageKey][$key][0]['target'])
144  || isset($this->LOCAL_LANG_UNSET[$this->languageKey][$key])
145  ) {
146  // Local language translation for key exists
147  $value = $this->LOCAL_LANG[‪$this->languageKey][$key][0]['target'];
148  } elseif (!empty($this->alternativeLanguageKeys)) {
149  $languages = array_reverse($this->alternativeLanguageKeys);
150  foreach ($languages as $language) {
151  if (!empty($this->LOCAL_LANG[$language][$key][0]['target'])
152  || isset($this->LOCAL_LANG_UNSET[$language][$key])
153  ) {
154  // Alternative language translation for key exists
155  $value = $this->LOCAL_LANG[$language][$key][0]['target'];
156  break;
157  }
158  }
159  }
160 
161  if ($value === null && (!empty($this->LOCAL_LANG['default'][$key][0]['target'])
162  || isset($this->LOCAL_LANG_UNSET['default'][$key]))
163  ) {
164  // Default language translation for key exists
165  // No charset conversion because default is English and thereby ASCII
166  $value = $this->LOCAL_LANG['default'][$key][0]['target'];
167  }
168 
169  if (is_array($arguments) && !empty($arguments) && $value !== null) {
170  $value = vsprintf($value, $arguments);
171  } else {
172  if (empty($value)) {
173  $value = $defaultValue;
174  }
175  }
176 
177  return $value;
178  }
179 
188  public function ‪translateValuesRecursive(array $array, array $translationFiles = []): array
189  {
190  $result = $array;
191  foreach ($result as $key => $value) {
192  if (is_array($value)) {
193  $result[$key] = $this->‪translateValuesRecursive($value, $translationFiles);
194  } else {
195  $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
196 
197  if (!empty($translationFiles)) {
198  foreach ($translationFiles as $translationFile) {
199  $translatedValue = $this->‪translate($value, null, $translationFile, null);
200  if (!empty($translatedValue)) {
201  $result[$key] = $translatedValue;
202  break;
203  }
204  }
205  } else {
206  $result[$key] = $this->‪translate($value, null, null, null, $value);
207  }
208  }
209  }
210  return $result;
211  }
212 
220  public function ‪translateToAllBackendLanguages(
221  string $key,
222  array $arguments = null,
223  array $translationFiles = []
224  ): array {
225  $result = [];
226  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
227 
228  foreach ($this->‪getAllTypo3BackendLanguages() as $language) {
229  $result[$language] = $key;
230  foreach ($translationFiles as $translationFile) {
231  $translatedValue = $this->‪translate($key, $arguments, $translationFile, $language, $key);
232  if ($translatedValue !== $key) {
233  $result[$language] = $translatedValue;
234  break;
235  }
236  }
237  }
238 
239  return $result;
240  }
241 
251  public function ‪translateFinisherOption(
252  FormRuntime $formRuntime,
253  string $finisherIdentifier,
254  string $optionKey,
255  string $optionValue,
256  array $renderingOptions = []
257  ): string {
258  if (empty($finisherIdentifier)) {
259  throw new \InvalidArgumentException('The argument "finisherIdentifier" is empty', 1476216059);
260  }
261  if (empty($optionKey)) {
262  throw new \InvalidArgumentException('The argument "optionKey" is empty', 1476216060);
263  }
264 
265  $finisherIdentifier = preg_replace('/Finisher$/', '', $finisherIdentifier);
266  $translationFiles = $renderingOptions['translationFiles'] ?? [];
267  if (empty($translationFiles)) {
268  $translationFiles = $formRuntime->getRenderingOptions()['translation']['translationFiles'];
269  }
270 
271  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
272 
273  if (isset($renderingOptions['translatePropertyValueIfEmpty'])) {
274  $translatePropertyValueIfEmpty = (bool)$renderingOptions['translatePropertyValueIfEmpty'];
275  } else {
276  $translatePropertyValueIfEmpty = true;
277  }
278 
279  if (empty($optionValue) && !$translatePropertyValueIfEmpty) {
280  return $optionValue;
281  }
282 
283  $language = null;
284  if (isset($renderingOptions['language'])) {
285  $language = $renderingOptions['language'];
286  }
287 
288  try {
289  $arguments = ‪ArrayUtility::getValueByPath($renderingOptions['arguments'] ?? [], $optionKey, '.');
290  } catch (MissingArrayPathException $e) {
291  $arguments = [];
292  }
293 
294  $originalFormIdentifier = null;
295  if (isset($formRuntime->getRenderingOptions()['_originalIdentifier'])) {
296  $originalFormIdentifier = $formRuntime->getRenderingOptions()['_originalIdentifier'];
297  }
298 
299  $translationKeyChain = [];
300  foreach ($translationFiles as $translationFile) {
301  if (!empty($originalFormIdentifier)) {
302  $translationKeyChain[] = sprintf('%s:%s.finisher.%s.%s', $translationFile, $originalFormIdentifier, $finisherIdentifier, $optionKey);
303  }
304  $translationKeyChain[] = sprintf('%s:%s.finisher.%s.%s', $translationFile, $formRuntime->getIdentifier(), $finisherIdentifier, $optionKey);
305  $translationKeyChain[] = sprintf('%s:finisher.%s.%s', $translationFile, $finisherIdentifier, $optionKey);
306  }
307 
308  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
309  $translatedValue = empty($translatedValue) ? $optionValue : $translatedValue;
310 
311  return $translatedValue;
312  }
313 
322  public function ‪translateFormElementValue(
323  RootRenderableInterface $element,
324  array $propertyParts,
325  FormRuntime $formRuntime
326  ) {
327  if (empty($propertyParts)) {
328  throw new \InvalidArgumentException('The argument "propertyParts" is empty', 1476216007);
329  }
330 
331  $propertyType = 'properties';
332  $property = implode('.', $propertyParts);
333  $renderingOptions = $element->getRenderingOptions();
334 
335  if ($property === 'label') {
336  $defaultValue = $element->getLabel();
337  } else {
338  if ($element instanceof FormElementInterface) {
339  try {
340  $defaultValue = ‪ArrayUtility::getValueByPath($element->getProperties(), $propertyParts, '.');
341  } catch (MissingArrayPathException $exception) {
342  $defaultValue = null;
343  }
344  } else {
345  $propertyType = 'renderingOptions';
346  try {
347  $defaultValue = ‪ArrayUtility::getValueByPath($renderingOptions, $propertyParts, '.');
348  } catch (MissingArrayPathException $exception) {
349  $defaultValue = null;
350  }
351  }
352  }
353 
354  if (isset($renderingOptions['translation']['translatePropertyValueIfEmpty'])) {
355  $translatePropertyValueIfEmpty = $renderingOptions['translation']['translatePropertyValueIfEmpty'];
356  } else {
357  $translatePropertyValueIfEmpty = true;
358  }
359 
360  if (empty($defaultValue) && !$translatePropertyValueIfEmpty) {
361  return $defaultValue;
362  }
363 
364  $defaultValue = empty($defaultValue) ? '' : $defaultValue;
365  $translationFiles = $renderingOptions['translation']['translationFiles'] ?? [];
366  if (empty($translationFiles)) {
367  $translationFiles = $formRuntime->getRenderingOptions()['translation']['translationFiles'];
368  }
369 
370  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
371 
372  $language = null;
373  if (isset($renderingOptions['translation']['language'])) {
374  $language = $renderingOptions['translation']['language'];
375  }
376 
377  try {
378  $arguments = ‪ArrayUtility::getValueByPath($renderingOptions['translation']['arguments'] ?? [], $propertyParts, '.');
379  } catch (MissingArrayPathException $e) {
380  $arguments = [];
381  }
382 
383  $originalFormIdentifier = null;
384  if (isset($formRuntime->getRenderingOptions()['_originalIdentifier'])) {
385  $originalFormIdentifier = $formRuntime->getRenderingOptions()['_originalIdentifier'];
386  }
387 
388  if ($property === 'options' && is_array($defaultValue)) {
389  foreach ($defaultValue as $optionValue => &$optionLabel) {
390  $translationKeyChain = [];
391  foreach ($translationFiles as $translationFile) {
392  if (!empty($originalFormIdentifier)) {
393  if ($element instanceof FormRuntime) {
394  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $property, $optionValue);
395  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $property, $optionValue);
396  } else {
397  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->getIdentifier(), $propertyType, $property, $optionValue);
398  }
399  }
400  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s.%s', $translationFile, $formRuntime->getIdentifier(), $element->getIdentifier(), $propertyType, $property, $optionValue);
401  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $element->getIdentifier(), $propertyType, $property, $optionValue);
402  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s.%s', $translationFile, $element->getType(), $propertyType, $property, $optionValue);
403  }
404 
405  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
406  $optionLabel = empty($translatedValue) ? $optionLabel : $translatedValue;
407  }
408  $translatedValue = $defaultValue;
409  } elseif ($property === 'fluidAdditionalAttributes' && is_array($defaultValue)) {
410  foreach ($defaultValue as $propertyName => &$propertyValue) {
411  $translationKeyChain = [];
412  foreach ($translationFiles as $translationFile) {
413  if (!empty($originalFormIdentifier)) {
414  if ($element instanceof FormRuntime) {
415  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $propertyName);
416  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $propertyName);
417  } else {
418  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->getIdentifier(), $propertyType, $propertyName);
419  }
420  }
421  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $formRuntime->getIdentifier(), $element->getIdentifier(), $propertyType, $propertyName);
422  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->getIdentifier(), $propertyType, $propertyName);
423  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->getType(), $propertyType, $propertyName);
424  }
425 
426  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
427  $propertyValue = empty($translatedValue) ? $propertyValue : $translatedValue;
428  }
429  $translatedValue = $defaultValue;
430  } else {
431  $translationKeyChain = [];
432  foreach ($translationFiles as $translationFile) {
433  if (!empty($originalFormIdentifier)) {
434  if ($element instanceof FormRuntime) {
435  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $propertyType, $property);
436  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $originalFormIdentifier, $propertyType, $property);
437  } else {
438  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $originalFormIdentifier, $element->getIdentifier(), $propertyType, $property);
439  }
440  }
441  $translationKeyChain[] = sprintf('%s:%s.element.%s.%s.%s', $translationFile, $formRuntime->getIdentifier(), $element->getIdentifier(), $propertyType, $property);
442  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->getIdentifier(), $propertyType, $property);
443  $translationKeyChain[] = sprintf('%s:element.%s.%s.%s', $translationFile, $element->getType(), $propertyType, $property);
444  }
445 
446  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
447  $translatedValue = empty($translatedValue) ? $defaultValue : $translatedValue;
448  }
449 
450  return $translatedValue;
451  }
452 
463  public function ‪translateFormElementError(
464  RootRenderableInterface $element,
465  int $code,
466  array $arguments,
467  string $defaultValue,
468  FormRuntime $formRuntime
469  ): string {
470  if (empty($code)) {
471  throw new \InvalidArgumentException('The argument "code" is empty', 1489272978);
472  }
473 
474  $validationErrors = $element->getProperties()['validationErrorMessages'] ?? null;
475  if (is_array($validationErrors)) {
476  foreach ($validationErrors as $validationError) {
477  if ((int)$validationError['code'] === $code) {
478  return sprintf($validationError['message'], ...$arguments);
479  }
480  }
481  }
482 
483  $renderingOptions = $element->getRenderingOptions();
484  $translationFiles = $renderingOptions['translation']['translationFiles'] ?? [];
485  if (empty($translationFiles)) {
486  $translationFiles = $formRuntime->getRenderingOptions()['translation']['translationFiles'];
487  }
488 
489  $translationFiles = $this->‪sortArrayWithIntegerKeysDescending($translationFiles);
490 
491  $language = null;
492  if (isset($renderingOptions['language'])) {
493  $language = $renderingOptions['language'];
494  }
495 
496  $originalFormIdentifier = null;
497  if (isset($formRuntime->getRenderingOptions()['_originalIdentifier'])) {
498  $originalFormIdentifier = $formRuntime->getRenderingOptions()['_originalIdentifier'];
499  }
500 
501  $translationKeyChain = [];
502  foreach ($translationFiles as $translationFile) {
503  if (!empty($originalFormIdentifier)) {
504  if ($element instanceof FormRuntime) {
505  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $originalFormIdentifier, $originalFormIdentifier, $code);
506  $translationKeyChain[] = sprintf('%s:validation.error.%s.%s', $translationFile, $originalFormIdentifier, $code);
507  } else {
508  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $originalFormIdentifier, $element->getIdentifier(), $code);
509  }
510  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s', $translationFile, $originalFormIdentifier, $code);
511  }
512  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s.%s', $translationFile, $formRuntime->getIdentifier(), $element->getIdentifier(), $code);
513  $translationKeyChain[] = sprintf('%s:%s.validation.error.%s', $translationFile, $formRuntime->getIdentifier(), $code);
514  $translationKeyChain[] = sprintf('%s:validation.error.%s.%s', $translationFile, $element->getIdentifier(), $code);
515  $translationKeyChain[] = sprintf('%s:validation.error.%s', $translationFile, $code);
516  }
517 
518  $translatedValue = $this->‪processTranslationChain($translationKeyChain, $language, $arguments);
519  $translatedValue = empty($translatedValue) ? $defaultValue : $translatedValue;
520  return $translatedValue;
521  }
522 
527  public function ‪setLanguage(string ‪$languageKey)
528  {
529  $this->languageKey = ‪$languageKey;
530  }
531 
536  public function ‪getLanguage(): string
537  {
538  return ‪$this->languageKey;
539  }
540 
547  protected function ‪processTranslationChain(
548  array $translationKeyChain,
549  string $language = null,
550  array $arguments = null
551  ) {
552  $translatedValue = null;
553  foreach ($translationKeyChain as $translationKey) {
554  $translatedValue = $this->‪translate($translationKey, $arguments, null, $language);
555  if (!empty($translatedValue)) {
556  break;
557  }
558  }
559  return $translatedValue;
560  }
561 
565  protected function ‪initializeLocalization(string $locallangPathAndFilename)
566  {
567  if (empty($this->languageKey)) {
568  $this->‪setLanguageKeys();
569  }
570 
571  if (!empty($locallangPathAndFilename)) {
572  $languageFactory = GeneralUtility::makeInstance(LocalizationFactory::class);
573  $this->LOCAL_LANG = $languageFactory->getParsedData($locallangPathAndFilename, $this->languageKey);
574 
575  foreach ($this->alternativeLanguageKeys as $language) {
576  $tempLL = $languageFactory->getParsedData($locallangPathAndFilename, $language);
577  if ($this->languageKey !== 'default' && isset($tempLL[$language])) {
578  $this->LOCAL_LANG[$language] = $tempLL[$language];
579  }
580  }
581  }
582  $this->‪loadTypoScriptLabels();
583  }
584 
588  protected function ‪setLanguageKeys()
589  {
590  $this->languageKey = 'default';
591 
592  $this->alternativeLanguageKeys = [];
593  if ((‪$GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface
594  && ‪ApplicationType::fromRequest(‪$GLOBALS['TYPO3_REQUEST'])->isFrontend()
595  ) {
596  $this->languageKey = $this->‪getCurrentSiteLanguage()->‪getTypo3Language();
597  if ($this->languageKey !== 'default') {
598  $locales = GeneralUtility::makeInstance(Locales::class);
599  if (in_array($this->languageKey, $locales->getLocales(), true)) {
600  foreach ($locales->getLocaleDependencies($this->languageKey) as $language) {
601  $this->alternativeLanguageKeys[] = $language;
602  }
603  }
604  }
605  } elseif (!empty(‪$GLOBALS['BE_USER']->user['lang'])) {
606  $this->languageKey = ‪$GLOBALS['BE_USER']->user['lang'];
607  } elseif (!empty($this->‪getLanguageService()->lang)) {
608  $this->languageKey = $this->‪getLanguageService()->lang;
609  }
610  }
611 
617  protected function ‪loadTypoScriptLabels()
618  {
619  $frameworkConfiguration = $this->configurationManager
621 
622  if (!is_array($frameworkConfiguration['_LOCAL_LANG'] ?? null)) {
623  return;
624  }
625  $this->LOCAL_LANG_UNSET = [];
626  foreach ($frameworkConfiguration['_LOCAL_LANG'] as ‪$languageKey => $labels) {
627  if (!(is_array($labels) && isset($this->LOCAL_LANG[‪$languageKey]))) {
628  continue;
629  }
630  foreach ($labels as $labelKey => $labelValue) {
631  if (is_string($labelValue)) {
632  $this->LOCAL_LANG[‪$languageKey][$labelKey][0]['target'] = $labelValue;
633  if ($labelValue === '') {
634  $this->LOCAL_LANG_UNSET[‪$languageKey][$labelKey] = '';
635  }
636  } elseif (is_array($labelValue)) {
637  $labelValue = $this->‪flattenTypoScriptLabelArray($labelValue, $labelKey);
638  foreach ($labelValue as $key => $value) {
639  $this->LOCAL_LANG[‪$languageKey][$key][0]['target'] = $value;
640  if ($value === '') {
641  $this->LOCAL_LANG_UNSET[‪$languageKey][$key] = '';
642  }
643  }
644  }
645  }
646  }
647  }
648 
660  protected function ‪flattenTypoScriptLabelArray(array $labelValues, string $parentKey = ''): array
661  {
662  $result = [];
663  foreach ($labelValues as $key => $labelValue) {
664  if (!empty($parentKey)) {
665  $key = $parentKey . '.' . $key;
666  }
667  if (is_array($labelValue)) {
668  $labelValue = $this->‪flattenTypoScriptLabelArray($labelValue, $key);
669  $result = array_merge($result, $labelValue);
670  } else {
671  $result[$key] = $labelValue;
672  }
673  }
674  return $result;
675  }
676 
683  protected function ‪sortArrayWithIntegerKeysDescending(array $array)
684  {
685  if (count(array_filter(array_keys($array), 'is_string')) === 0) {
686  krsort($array);
687  }
688  return $array;
689  }
690 
696  protected function ‪getCurrentSiteLanguage(): ?SiteLanguage
697  {
698  if (‪$GLOBALS['TYPO3_REQUEST'] instanceof ServerRequestInterface) {
699  return ‪$GLOBALS['TYPO3_REQUEST']->getAttribute('language', null);
700  }
701  return null;
702  }
703 
707  protected function ‪getAllTypo3BackendLanguages(): array
708  {
709  $languages = array_merge(
710  ['default'],
711  array_values(‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['lang']['availableLanguages'] ?? [])
712  );
713 
714  return $languages;
715  }
716 
720  protected function ‪getLanguageService(): ‪LanguageService
721  {
722  return ‪$GLOBALS['LANG'];
723  }
724 }
‪TYPO3\CMS\Core\Http\ApplicationType\fromRequest
‪static static fromRequest(ServerRequestInterface $request)
Definition: ApplicationType.php:62
‪TYPO3\CMS\Form\Service\TranslationService\getInstance
‪static self getInstance()
Definition: TranslationService.php:87
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormRuntime.php:109
‪TYPO3\CMS\Form\Service\TranslationService\setLanguage
‪setLanguage(string $languageKey)
Definition: TranslationService.php:523
‪TYPO3\CMS\Form\Service\TranslationService\translateFormElementValue
‪string array translateFormElementValue(RootRenderableInterface $element, array $propertyParts, FormRuntime $formRuntime)
Definition: TranslationService.php:318
‪TYPO3\CMS\Form\Service\TranslationService\translateFormElementError
‪string translateFormElementError(RootRenderableInterface $element, int $code, array $arguments, string $defaultValue, FormRuntime $formRuntime)
Definition: TranslationService.php:459
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime\getRenderingOptions
‪array getRenderingOptions()
Definition: FormRuntime.php:1024
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:25
‪TYPO3\CMS\Form\Service\TranslationService\getAllTypo3BackendLanguages
‪array getAllTypo3BackendLanguages()
Definition: TranslationService.php:703
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getLabel
‪string getLabel()
‪TYPO3\CMS\Form\Service\TranslationService
Definition: TranslationService.php:45
‪TYPO3\CMS\Form\Service\TranslationService\setLanguageKeys
‪setLanguageKeys()
Definition: TranslationService.php:584
‪TYPO3\CMS\Core\Localization\LocalizationFactory
Definition: LocalizationFactory.php:31
‪TYPO3\CMS\Core\Utility\Exception\MissingArrayPathException
Definition: MissingArrayPathException.php:27
‪TYPO3\CMS\Core\Utility\PathUtility\isExtensionPath
‪static bool isExtensionPath(string $path)
Definition: PathUtility.php:121
‪TYPO3\CMS\Form\Service\TranslationService\translateFinisherOption
‪string translateFinisherOption(FormRuntime $formRuntime, string $finisherIdentifier, string $optionKey, string $optionValue, array $renderingOptions=[])
Definition: TranslationService.php:247
‪TYPO3\CMS\Form\Service\TranslationService\$configurationManager
‪ConfigurationManagerInterface $configurationManager
Definition: TranslationService.php:73
‪TYPO3\CMS\Form\Service\TranslationService\getLanguage
‪string getLanguage()
Definition: TranslationService.php:532
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Core\Localization\Locales
Definition: Locales.php:30
‪TYPO3\CMS\Form\Service\TranslationService\$LOCAL_LANG
‪array $LOCAL_LANG
Definition: TranslationService.php:50
‪TYPO3\CMS\Form\Service\TranslationService\processTranslationChain
‪string null processTranslationChain(array $translationKeyChain, string $language=null, array $arguments=null)
Definition: TranslationService.php:543
‪TYPO3\CMS\Form\Service\TranslationService\initializeLocalization
‪initializeLocalization(string $locallangPathAndFilename)
Definition: TranslationService.php:561
‪TYPO3\CMS\Form\Service\TranslationService\translateValuesRecursive
‪array translateValuesRecursive(array $array, array $translationFiles=[])
Definition: TranslationService.php:184
‪TYPO3\CMS\Core\Http\ApplicationType
Definition: ApplicationType.php:52
‪TYPO3\CMS\Form\Service
Definition: DatabaseService.php:18
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getIdentifier
‪string getIdentifier()
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface\CONFIGURATION_TYPE_FRAMEWORK
‪const CONFIGURATION_TYPE_FRAMEWORK
Definition: ConfigurationManagerInterface.php:29
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage
Definition: SiteLanguage.php:26
‪TYPO3\CMS\Form\Service\TranslationService\$LOCAL_LANG_UNSET
‪array $LOCAL_LANG_UNSET
Definition: TranslationService.php:59
‪TYPO3\CMS\Core\Utility\ArrayUtility\getValueByPath
‪static mixed getValueByPath(array $array, $path, $delimiter='/')
Definition: ArrayUtility.php:180
‪TYPO3\CMS\Form\Service\TranslationService\__construct
‪__construct(ConfigurationManagerInterface $configurationManager)
Definition: TranslationService.php:75
‪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:65
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getRenderingOptions
‪array getRenderingOptions()
‪TYPO3\CMS\Form\Service\TranslationService\$alternativeLanguageKeys
‪array $alternativeLanguageKeys
Definition: TranslationService.php:71
‪TYPO3\CMS\Form\Service\TranslationService\sortArrayWithIntegerKeysDescending
‪array sortArrayWithIntegerKeysDescending(array $array)
Definition: TranslationService.php:679
‪TYPO3\CMS\Form\Service\TranslationService\translate
‪mixed translate( $key, array $arguments=null, string $locallangPathAndFilename=null, string $language=null, $defaultValue='')
Definition: TranslationService.php:104
‪TYPO3\CMS\Form\Service\TranslationService\flattenTypoScriptLabelArray
‪array flattenTypoScriptLabelArray(array $labelValues, string $parentKey='')
Definition: TranslationService.php:656
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:24
‪TYPO3\CMS\Form\Service\TranslationService\loadTypoScriptLabels
‪loadTypoScriptLabels()
Definition: TranslationService.php:613
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:22
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface\getType
‪string getType()
‪TYPO3\CMS\Form\Service\TranslationService\getCurrentSiteLanguage
‪SiteLanguage null getCurrentSiteLanguage()
Definition: TranslationService.php:692
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime\getIdentifier
‪string getIdentifier()
Definition: FormRuntime.php:736
‪TYPO3\CMS\Form\Service\TranslationService\translateToAllBackendLanguages
‪array translateToAllBackendLanguages(string $key, array $arguments=null, array $translationFiles=[])
Definition: TranslationService.php:216
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Form\Service\TranslationService\getLanguageService
‪LanguageService getLanguageService()
Definition: TranslationService.php:716
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage\getTypo3Language
‪string getTypo3Language()
Definition: SiteLanguage.php:254