Mercurial > hg > isophonics-drupal-site
comparison core/modules/language/tests/src/Functional/ConfigurableLanguageManagerTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\language\Functional; | |
4 | |
5 use Drupal\Core\Cache\Cache; | |
6 use Drupal\language\Entity\ConfigurableLanguage; | |
7 use Drupal\language\Entity\ContentLanguageSettings; | |
8 use Drupal\node\Entity\Node; | |
9 use Drupal\node\Entity\NodeType; | |
10 use Drupal\Tests\BrowserTestBase; | |
11 | |
12 /** | |
13 * Tests Language Negotiation. | |
14 * | |
15 * Uses different negotiators for content and interface. | |
16 * | |
17 * @group language | |
18 */ | |
19 class ConfigurableLanguageManagerTest extends BrowserTestBase { | |
20 | |
21 /** | |
22 * {@inheritdoc} | |
23 */ | |
24 public static $modules = [ | |
25 'language', | |
26 'content_translation', | |
27 'node', | |
28 'locale', | |
29 'block', | |
30 'system', | |
31 'user', | |
32 ]; | |
33 | |
34 /** | |
35 * {@inheritdoc} | |
36 */ | |
37 protected function setUp() { | |
38 parent::setUp(); | |
39 | |
40 /** @var \Drupal\user\UserInterface $user */ | |
41 $user = $this->createUser([], '', TRUE); | |
42 $this->drupalLogin($user); | |
43 ConfigurableLanguage::createFromLangcode('es')->save(); | |
44 | |
45 // Create a page node type and make it translatable. | |
46 NodeType::create([ | |
47 'type' => 'page', | |
48 'name' => t('Page'), | |
49 ])->save(); | |
50 | |
51 $config = ContentLanguageSettings::loadByEntityTypeBundle('node', 'page'); | |
52 $config->setDefaultLangcode('en') | |
53 ->setLanguageAlterable(TRUE) | |
54 ->save(); | |
55 | |
56 // Create a Node with title 'English' and translate it to Spanish. | |
57 $node = Node::create([ | |
58 'type' => 'page', | |
59 'title' => 'English', | |
60 ]); | |
61 $node->save(); | |
62 $node->addTranslation('es', ['title' => 'Español']); | |
63 $node->save(); | |
64 | |
65 // Enable both language_interface and language_content language negotiation. | |
66 \Drupal::getContainer()->get('language_negotiator')->updateConfiguration([ | |
67 'language_interface', | |
68 'language_content', | |
69 ]); | |
70 | |
71 // Set the preferred language of the user for admin pages to English. | |
72 $user->set('preferred_admin_langcode', 'en')->save(); | |
73 | |
74 // Make sure node edit pages are administration pages. | |
75 $this->config('node.settings')->set('use_admin_theme', '1')->save(); | |
76 $this->container->get('router.builder')->rebuild(); | |
77 | |
78 // Place a Block with a translatable string on the page. | |
79 $this->placeBlock('system_powered_by_block', ['region' => 'content']); | |
80 | |
81 // Load the Spanish Node page once, to register the translatable string. | |
82 $this->drupalGet('/es/node/1'); | |
83 | |
84 // Translate the Powered by string. | |
85 /** @var \Drupal\locale\StringStorageInterface $string_storage */ | |
86 $string_storage = \Drupal::getContainer()->get('locale.storage'); | |
87 $source = $string_storage->findString(['source' => 'Powered by <a href=":poweredby">Drupal</a>']); | |
88 $string_storage->createTranslation([ | |
89 'lid' => $source->lid, | |
90 'language' => 'es', | |
91 'translation' => 'Funciona con ...', | |
92 ])->save(); | |
93 // Invalidate caches so that the new translation will be used. | |
94 Cache::invalidateTags(['rendered', 'locale']); | |
95 } | |
96 | |
97 /** | |
98 * Test translation with URL and Preferred Admin Language negotiators. | |
99 * | |
100 * The interface language uses the preferred language for admin pages of the | |
101 * user and after that the URL. The Content uses just the URL. | |
102 */ | |
103 public function testUrlContentTranslationWithPreferredAdminLanguage() { | |
104 $assert_session = $this->assertSession(); | |
105 // Set the interface language to use the preferred administration language | |
106 // and then the URL. | |
107 /** @var \Drupal\language\LanguageNegotiatorInterface $language_negotiator */ | |
108 $language_negotiator = \Drupal::getContainer()->get('language_negotiator'); | |
109 $language_negotiator->saveConfiguration('language_interface', [ | |
110 'language-user-admin' => 1, | |
111 'language-url' => 2, | |
112 'language-selected' => 3, | |
113 ]); | |
114 // Set Content Language Negotiator to use just the URL. | |
115 $language_negotiator->saveConfiguration('language_content', [ | |
116 'language-url' => 4, | |
117 'language-selected' => 5, | |
118 ]); | |
119 | |
120 // See if the full view of the node in english is present and the | |
121 // string in the Powered By Block is in English. | |
122 $this->drupalGet('/node/1'); | |
123 $assert_session->pageTextContains('English'); | |
124 $assert_session->pageTextContains('Powered by'); | |
125 | |
126 // Load the spanish node page again and see if both the node and the string | |
127 // are translated. | |
128 $this->drupalGet('/es/node/1'); | |
129 $assert_session->pageTextContains('Español'); | |
130 $assert_session->pageTextContains('Funciona con'); | |
131 $assert_session->pageTextNotContains('Powered by'); | |
132 | |
133 // Check if the Powered by string is shown in English on an | |
134 // administration page, and the node content is shown in Spanish. | |
135 $this->drupalGet('/es/node/1/edit'); | |
136 $assert_session->pageTextContains('Español'); | |
137 $assert_session->pageTextContains('Powered by'); | |
138 $assert_session->pageTextNotContains('Funciona con'); | |
139 } | |
140 | |
141 /** | |
142 * Test translation with URL and Session Language Negotiators. | |
143 */ | |
144 public function testUrlContentTranslationWithSessionLanguage() { | |
145 $assert_session = $this->assertSession(); | |
146 /** @var \Drupal\language\LanguageNegotiatorInterface $language_negotiator */ | |
147 $language_negotiator = \Drupal::getContainer()->get('language_negotiator'); | |
148 // Set Interface Language Negotiator to Session. | |
149 $language_negotiator->saveConfiguration('language_interface', [ | |
150 'language-session' => 1, | |
151 'language-url' => 2, | |
152 'language-selected' => 3, | |
153 ]); | |
154 | |
155 // Set Content Language Negotiator to URL. | |
156 $language_negotiator->saveConfiguration('language_content', [ | |
157 'language-url' => 4, | |
158 'language-selected' => 5, | |
159 ]); | |
160 | |
161 // See if the full view of the node in english is present and the | |
162 // string in the Powered By Block is in English. | |
163 $this->drupalGet('/node/1'); | |
164 $assert_session->pageTextContains('English'); | |
165 $assert_session->pageTextContains('Powered by'); | |
166 | |
167 // The language session variable has not been set yet, so | |
168 // The string should be in Spanish. | |
169 $this->drupalGet('/es/node/1'); | |
170 $assert_session->pageTextContains('Español'); | |
171 $assert_session->pageTextNotContains('Powered by'); | |
172 $assert_session->pageTextContains('Funciona con'); | |
173 | |
174 // Set the session language to Spanish but load the English node page. | |
175 $this->drupalGet('/node/1', ['query' => ['language' => 'es']]); | |
176 $assert_session->pageTextContains('English'); | |
177 $assert_session->pageTextNotContains('Español'); | |
178 $assert_session->pageTextContains('Funciona con'); | |
179 $assert_session->pageTextNotContains('Powered by'); | |
180 | |
181 // Set the session language to English but load the node page in Spanish. | |
182 $this->drupalGet('/es/node/1', ['query' => ['language' => 'en']]); | |
183 $assert_session->pageTextNotContains('English'); | |
184 $assert_session->pageTextContains('Español'); | |
185 $assert_session->pageTextNotContains('Funciona con'); | |
186 $assert_session->pageTextContains('Powered by'); | |
187 } | |
188 | |
189 } |