Shopsprache in Controller wechseln

Hallo Forum,

ist es möglich in einem Controller einer Extension den SalesChannelContext einer beliebigen, angelegten Sprache zu bekommen?

Hintergrund: Ich habe eine Extension geschrieben dir mir eine PDF-Ansicht der Produkt-Detail-Seite ausgibt.
Eine PDF ist damit aufrufbar über die URL:

/datei/{%artikelnummer%}_de.pdf

damit ich erhalte die PDF der default-Sprache (deutsch).

Wenn ich den Controller über die URL

/fr/datei/{%artikelnummer%}_de.pdf 

aufrufe erhalte ich auch die PDF in französischer Sprache, soweit so gut.

 

Ich möchte aber, dass ich die französische PDF über den Aufruf 

/datei/{%artikelnummer%}_fr.pdf 

erhalte.

Ich möchte also den Controller immer über die URL der Standard-Sprache aufrufen und dann anhand des Dateinamen den SalesChannelContext einer anderen Sprache bekommen. Ist mein Gedanke hier richtig, dass ich den context im controller ändern muss oder bin ich mit meinem Ansatz komplett auf dem Holzweg?

Hoffe jemand kann mir hier weiter helfen.

private function getLanguageIdByLocale(string $locale): ?string
    {
        $sql = <<connection->executeQuery($sql, ['code' => '%' . $locale . '%'])->fetchColumn();
}

...

        if ($data->get('language')) {
            $languageId = $this->getLanguageIdByLocale($data->get('language'));

            if ($languageId && $languageId != $context->getLanguageId()) {
                $context = new Context(
                    new SystemSource(),
                    [],
                    Defaults::CURRENCY,
                    [$languageId, Defaults::LANGUAGE_SYSTEM],
                    $context->getVersionId()
                );
            }
        }

du kannst auch einen neuen Context aufbauen.

 

2 „Gefällt mir“

Wenn der Sales Channel da ist, kannst du auch mit der salesChannelFactorty dir den SalesChannelContext bauen lassen

@Moorleiche schrieb:

private function getLanguageIdByLocale(string $locale): ?string
{
$sql = <executeQuery($sql, [‚code‘ => ‚%‘ . $locale . ‚%‘])->fetchColumn();
}

if ($data->get(‚language‘)) {
$languageId = $this->getLanguageIdByLocale($data->get(‚language‘));

if ($languageId && $languageId != $context->getLanguageId()) {
$context = new Context(
new SystemSource(),
,
Defaults::CURRENCY,
[$languageId, Defaults::LANGUAGE_SYSTEM],
$context->getVersionId()
);
}
}

du kannst auch einen neuen Context aufbauen.

So funktionierts. Besten Dank!