function LanguageNegotiationSession::getLanguageSwitchLinks

Same name and namespace in other branches
  1. 9 core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSession::getLanguageSwitchLinks()
  2. 8.9.x core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSession::getLanguageSwitchLinks()
  3. 11.x core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationSession::getLanguageSwitchLinks()

Returns language switch links.

Parameters

\Symfony\Component\HttpFoundation\Request $request: The current request.

string $type: The language type.

\Drupal\Core\Url $url: The URL the switch links will be relative to.

Return value

array An array of link arrays keyed by language code.

Overrides LanguageSwitcherInterface::getLanguageSwitchLinks

File

core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php, line 159

Class

LanguageNegotiationSession
Identify language from a request/session parameter.

Namespace

Drupal\language\Plugin\LanguageNegotiation

Code

public function getLanguageSwitchLinks(Request $request, $type, Url $url) {
  $links = [];
  $query = [];
  parse_str($request->getQueryString() ?? '', $query);
  $config = $this->config
    ->get('language.negotiation')
    ->get('session');
  $param = $config['parameter'];
  $language_query = $request->getSession()
    ->has($param) ? $request->getSession()
    ->get($param) : $this->languageManager
    ->getCurrentLanguage($type)
    ->getId();
  foreach ($this->languageManager
    ->getNativeLanguages() as $language) {
    $langcode = $language->getId();
    $links[$langcode] = [
      // We need to clone the $url object to avoid using the same one for all
      // links. When the links are rendered, options are set on the $url
      // object, so if we use the same one, they would be set for all links.
'url' => clone $url,
      'title' => $language->getName(),
      'attributes' => [
        'class' => [
          'language-link',
        ],
      ],
      'query' => $query,
    ];
    if ($language_query != $langcode) {
      $links[$langcode]['query'][$param] = $langcode;
    }
    else {
      $links[$langcode]['attributes']['class'][] = 'session-active';
    }
  }
  return $links;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.