Bug #77506
closedThe default translate to message does not work for more than one localizable field with prefixLangTitle flag per table
100%
Description
If an object has more than one field with the prefixLangTitle
flag enabled, only the first one will have a correct prefix after localize the object. All further fields will only get empty brakets ([]) as prefix.
The problem seems to be that the $translateToMsg
variable is not reset within the foreach loop in the localize
method (DataHandler - Line 4636). So it will be reused in next loop and set to $TSConfig['translateToMessage']
which is empty by default:
public function localize($table, $uid, $language) { ... // Set exclude Fields: foreach ($GLOBALS['TCA'][$Ttable]['columns'] as $fN => $fCfg) { // Check if we are just prefixing: if ($fCfg['l10n_mode'] == 'prefixLangTitle') { if (($fCfg['config']['type'] == 'text' || $fCfg['config']['type'] == 'input') && (string)$row[$fN] !== '') { list($tscPID) = BackendUtility::getTSCpid($table, $uid, ''); $TSConfig = $this->getTCEMAIN_TSconfig($tscPID); if (!empty($TSConfig['translateToMessage'])) { $translateToMsg = $GLOBALS['LANG'] ? $GLOBALS['LANG']->sL($TSConfig['translateToMessage']) : $TSConfig['translateToMessage']; $translateToMsg = @sprintf($translateToMsg, $langRec['title']); } if (empty($translateToMsg)) { $translateToMsg = 'Translate to ' . $langRec['title'] . ':'; } else { $translateToMsg = @sprintf($TSConfig['translateToMessage'], $langRec['title']); } $overrideValues[$fN] = '[' . $translateToMsg . '] ' . $row[$fN]; } } ...
Reset the variable should solve this issue:
public function localize($table, $uid, $language) { ... // Set exclude Fields: foreach ($GLOBALS['TCA'][$Ttable]['columns'] as $fN => $fCfg) { // Check if we are just prefixing: if ($fCfg['l10n_mode'] == 'prefixLangTitle') { if (($fCfg['config']['type'] == 'text' || $fCfg['config']['type'] == 'input') && (string)$row[$fN] !== '') { $translateToMsg = ''; list($tscPID) = BackendUtility::getTSCpid($table, $uid, ''); $TSConfig = $this->getTCEMAIN_TSconfig($tscPID); if (!empty($TSConfig['translateToMessage'])) { $translateToMsg = $GLOBALS['LANG'] ? $GLOBALS['LANG']->sL($TSConfig['translateToMessage']) : $TSConfig['translateToMessage']; $translateToMsg = @sprintf($translateToMsg, $langRec['title']); } if (empty($translateToMsg)) { $translateToMsg = 'Translate to ' . $langRec['title'] . ':'; } else { $translateToMsg = @sprintf($TSConfig['translateToMessage'], $langRec['title']); } $overrideValues[$fN] = '[' . $translateToMsg . '] ' . $row[$fN]; } } ...
As workaround the translateToMessage
has to be set explicitly in the page TSConfig:
TCEMAIN { translateToMessage = Translate to %s }
Updated by Riccardo De Contardi over 7 years ago
I think that's the same issue as #68272
Updated by Gerrit Code Review over 7 years ago
- Status changed from New to Under Review
Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/49499
Updated by Gerrit Code Review over 7 years ago
Patch set 1 for branch TYPO3_7-6 of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/49522
Updated by Georg Ringer over 7 years ago
- Status changed from Under Review to Resolved
- % Done changed from 0 to 100
Applied in changeset d8450b7871fe4adbc3f2748f8be36045aa36f62e.