Das kriegst du nur per XLCASS hin. Für die Erzeugung verantwortlich sind je nach Icon-Typ die Klassen TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider oder TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider.
Darin enthalten ist jeweils eine Methode generateMarkup die das finale img-Tag zurück gibt mit standardmäßig fix alt="".
Da es hier weder Hooks noch Events gibt könntest du die betroffenen Klassen per XCLASS erweitern und darin beispielsweise per String-Operation das alt-Attribut der String-Rückgabe der parent Methode ersetzen lassen.
namespace DeinVendorname\DeinPackagename\Xclass\SvgIconProvider;
class SvgIconProvider extends \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider {
/**
* Überschreibt die generateMarkup Methode, um das alt-Attribut anzupassen.
*/
protected function generateMarkup(Icon $icon, array $options): string
// Rufe die originale Logik auf, um den Basis-HTML-String zu erhalten
$originalMarkup = parent::generateMarkup($icon, $options);
// Ersetze dann das alt-Attribut
$altText = 'mein test'; // Dein gewünschter alt-Text
$updatedMarkup = str_replace('alt=""', 'alt="' . htmlspecialchars($altText) . '"', $originalMarkup);
return $updatedMarkup;
}
}
Es bleibt natürlich noch die Frage offen woher dein $altText dann kommen soll?
Falls du das über den ViewHelper definieren können möchtest, dann müsstest du den ViewHelper TYPO3\CMS\Core\ViewHelpers\IconViewHelper um ein entsprechendes Argument erweitern, dieses an die getIcon Methode der TYPO3\CMS\Core\Imaging\IconFactory Klasse durchreichen, entsprechend also die IconFactory per XCLASS erweitern um dann den Wert an SvgIconProvider::generateMarkup weiter zu reichen. Das ist etwas viel XCLASSing. Ich glaube ich würde einfach einen eigenen ViewHelper aus den Core-Komponenten zusammmenbauen, der das gleiche macht. So würdest du dir die ganzen XCLASS-Erweiterungen sparen, die man ja möglichst vermeiden will, da sie den Core modifizieren und eine zusätzliche Fehlerquelle sein können.
EDIT:
Eben ging mir durch den Kopf dass man ja genauso gut den ViewHelper direkt per XCLASS erweitern könnte und im img-Tag String des return das o.g. Replacement durchführen. Allerdings haben wir hier in TYPO3 das "Problem", dass ViewHelper neuerdings als final deklariert werden, was die Erweiterung unmöglich macht. Nunja darüber wurde schon viel diskutiert, siehe: https://twitter.com/NamelessCoder/status/1711699896149893390
Dennoch könnte dein eigener ViewHelper eine Kopie des originalen sein und darin das Replacement durchführen. Das ist immernoch einfacher und weniger Fehleranfällig als XCLASSing durch die ganzen betroffenen Stellen.