Skip to content
Snippets Groups Projects
Commit dcdd2c20 authored by Dieter Holvoet's avatar Dieter Holvoet
Browse files

Merge branch '2953640-url-language-detection' into '11.x'

Issue #2953640: URL language detection with empty path prefix not working

See merge request !2807
parents 539c50a2 f58e31c6
No related branches found
No related tags found
No related merge requests found
Pipeline #174976 failed
Pipeline: drupal

#174979

    ......@@ -72,6 +72,16 @@ public function getLangcode(Request $request = NULL) {
    if ($negotiated_language) {
    $langcode = $negotiated_language->getId();
    }
    $no_prefix_langcode = array_search('', $config['prefixes']);
    if ($negotiated_language === FALSE && $no_prefix_langcode !== FALSE) {
    $langcode = $no_prefix_langcode;
    }
    $no_prefix_langcode = array_search('', $config['prefixes']);
    if ($negotiated_language === FALSE && $no_prefix_langcode !== FALSE) {
    $langcode = $no_prefix_langcode;
    }
    break;
    case LanguageNegotiationUrl::CONFIG_DOMAIN:
    ......
    ......@@ -14,6 +14,13 @@
    */
    class LanguageBrowserDetectionAcceptLanguageTest extends BrowserTestBase {
    /**
    * An admin user.
    *
    * @var \Drupal\user\UserInterface
    */
    protected $adminUser;
    /**
    * Modules to enable.
    *
    ......@@ -36,9 +43,11 @@ class LanguageBrowserDetectionAcceptLanguageTest extends BrowserTestBase {
    */
    protected function setUp(): void {
    parent::setUp();
    // User to manage languages.
    $admin = $this->drupalCreateUser([], NULL, TRUE);
    $this->drupalLogin($admin);
    // Initiate the admin user:
    $this->adminUser = $this->drupalCreateUser([], NULL, TRUE);
    // Login as admin:
    $this->drupalLogin($this->adminUser);
    // Create FR.
    ConfigurableLanguage::createFromLangcode('fr')->save();
    ......@@ -126,4 +135,45 @@ public function testAcceptLanguageEmptyDefault() {
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
    }
    /**
    * Tests language headers when leaving the default language prefix empty.
    *
    * Mainly the correct "Content-Language" header is validated as well as the
    * state of the "X-Drupal-Cache" header.
    */
    public function testEmptyLanguagePrefixForDefaultLanguage() {
    $this->drupalLogin($this->adminUser);
    // Leave default "en" prefix empty:
    $this->drupalGet('/admin/config/regional/language/detection/url');
    $this->submitForm([
    'prefix[en]' => '',
    'prefix[fr]' => 'fr',
    ], 'Save configuration');
    $this->drupalLogout();
    // Check correct headers.
    $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en']);
    $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS');
    $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']);
    $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'MISS');
    // Check with french browser.
    $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'fr-FR,fr']);
    $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
    // Check with UK browser.
    $this->drupalGet('/system-test/echo/language test', [], ['Accept-Language' => 'en-UK,en']);
    $this->assertSession()->responseHeaderEquals('Content-Language', 'en');
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
    // Check if french URL is still cached:
    $this->drupalGet('/fr/system-test/echo/language test', [], ['Accept-Language' => 'en']);
    $this->assertSession()->responseHeaderEquals('Content-Language', 'fr');
    $this->assertSession()->responseHeaderEquals('X-Drupal-Cache', 'HIT');
    }
    }
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment