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; | |
| } | |
| } |