# Shopsprache in Controller wechseln

**URL:** <https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340>\
**Category:** Programmierung\
**Created:** [13. Juli 2020 um 14:27 UTC](https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340 "2020-07-13T14:27:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Schmuh](https://avatars.discourse-cdn.com/v4/letter/s/7ab992/32.png) [@Schmuh](https://forum.shopware.com/u/Schmuh)\
**Post date:** [13. Juli 2020 um 14:27 UTC](https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340/1 "2020-07-13T14:27:04Z")

</div>

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.

&nbsp;

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

```
/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&nbsp;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.

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [14. Juli 2020 um 13:14 UTC](https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340/2 "2020-07-14T13:14:40Z")

</div>

```
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.

&nbsp;

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [14. Juli 2020 um 13:40 UTC](https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340/3 "2020-07-14T13:40:55Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Schmuh](https://avatars.discourse-cdn.com/v4/letter/s/7ab992/32.png) [@Schmuh](https://forum.shopware.com/u/Schmuh)\
**Post date:** [20. Juli 2020 um 16:18 UTC](https://forum.shopware.com/t/shopsprache-in-controller-wechseln/68340/4 "2020-07-20T16:18:36Z")

</div>

> [@Moorleiche schrieb:](https://forum.shopware.com/profile/32221/Moorleiche "Moorleiche")
> 
> 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!
