From core perspective, `ParserOutput::setLanguageLinks()` should accept an array of `LinkTarget`s. What happens now is that Parser has a LinkTarget, formats it to prefixed text, then Skin/Api (basically all usages of it) parses it again into Title, or even worse implements its own custom parsing, like LinksUpdate.
Currently accepts an array of the form:
```
$languageLinks[$languageCode] = $languageCode . ':' . $siteLink->getPageName();
```
(see https://gerrit.wikimedia.org/g/mediawiki/extensions/ArticlePlaceholder/+/18e4f52cc53b0ad6d9954c58c36df9f97f3c97ad/includes/AboutTopicRenderer.php#293)
Should probably have an API like:
```
public function addLanguageLink(string $langCode, LinkTarget page);
```
Note that core does not seem to use `::setLanguageLinks()` [at all any more](https://codesearch.wmcloud.org/deployed/?q=%5BOo%5Dutput%28%5C%28%5C%29%29%3F-%3EsetLanguageLinks&i=nope). Perhaps this entire method should be deprecated and removed instead?
The `::addLanguageLink()` method, on the other hand, [is significantly used](https://codesearch.wmcloud.org/deployed/?q=%5BOo%5Dutput%28%5C%28%5C%29%29%3F-%3EaddLanguageLink&i=nope). It should also take a `LinkTarget` argument.