Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 14 |
LanguageNegotiationUrlFallback | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 14 |
getLangcode | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 14 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback. | |
*/ | |
namespace Drupal\language\Plugin\LanguageNegotiation; | |
use Drupal\language\LanguageNegotiationMethodBase; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* Class that determines the language to be assigned to URLs when none is | |
* detected. | |
* | |
* The language negotiation process has a fallback chain that ends with the | |
* default language negotiation method. Each built-in language type has a | |
* separate initialization: | |
* - Interface language, which is the only configurable one, always gets a valid | |
* value. If no request-specific language is detected, the default language | |
* will be used. | |
* - Content language merely inherits the interface language by default. | |
* - URL language is detected from the requested URL and will be used to rewrite | |
* URLs appearing in the page being rendered. If no language can be detected, | |
* there are two possibilities: | |
* - If the default language has no configured path prefix or domain, then the | |
* default language is used. This guarantees that (missing) URL prefixes are | |
* preserved when navigating through the site. | |
* - If the default language has a configured path prefix or domain, a | |
* requested URL having an empty prefix or domain is an anomaly that must be | |
* fixed. This is done by introducing a prefix or domain in the rendered | |
* page matching the detected interface language. | |
* | |
* @LanguageNegotiation( | |
* id = Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrlFallback::METHOD_ID, | |
* types = {Drupal\Core\Language\LanguageInterface::TYPE_URL}, | |
* weight = 8, | |
* name = @Translation("URL fallback"), | |
* description = @Translation("Use an already detected language for URLs if none is found.") | |
* ) | |
*/ | |
class LanguageNegotiationUrlFallback extends LanguageNegotiationMethodBase { | |
/** | |
* The language negotiation method id. | |
*/ | |
const METHOD_ID = 'language-url-fallback'; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getLangcode(Request $request = NULL) { | |
$langcode = NULL; | |
if ($this->languageManager) { | |
$default = $this->languageManager->getDefaultLanguage(); | |
$config = $this->config->get('language.negotiation')->get('url'); | |
$prefix = ($config['source'] == LanguageNegotiationUrl::CONFIG_PATH_PREFIX); | |
// If the default language is not configured to convey language | |
// information, a missing URL language information indicates that URL | |
// language should be the default one, otherwise we fall back to an | |
// already detected language. | |
if (($prefix && empty($config['prefixes'][$default->getId()])) || (!$prefix && empty($config['domains'][$default->getId()]))) { | |
$langcode = $default->getId(); | |
} | |
else { | |
$langcode = $this->languageManager->getCurrentLanguage()->getId(); | |
} | |
} | |
return $langcode; | |
} | |
} |