'translatedOne', 'two' => 'translatedTwo', 'three' => 'translatedThree', ]; /** * Created terms. * * @var \Drupal\taxonomy\Entity\Term[] */ protected $terms = []; /** * {@inheritdoc} */ public static $modules = ['taxonomy', 'language', 'content_translation']; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->setupLanguages(); $this->vocabulary = $this->createVocabulary(); $this->enableTranslation(); $this->setUpTerms(); $this->setUpTermReferenceField(); } /** * Test translated breadcrumbs. */ public function testTranslatedBreadcrumbs() { // Ensure non-translated breadcrumb is correct. $breadcrumb = [Url::fromRoute('')->toString() => 'Home']; foreach ($this->terms as $term) { $breadcrumb[$term->url()] = $term->label(); } // The last item will not be in the breadcrumb. array_pop($breadcrumb); // Check the breadcrumb on the leaf term page. $term = $this->getLeafTerm(); $this->assertBreadcrumb($term->urlInfo(), $breadcrumb, $term->label()); $languages = \Drupal::languageManager()->getLanguages(); // Construct the expected translated breadcrumb. $breadcrumb = [Url::fromRoute('', [], ['language' => $languages[$this->translateToLangcode]])->toString() => 'Home']; foreach ($this->terms as $term) { $translated = $term->getTranslation($this->translateToLangcode); $url = $translated->url('canonical', ['language' => $languages[$this->translateToLangcode]]); $breadcrumb[$url] = $translated->label(); } array_pop($breadcrumb); // Check for the translated breadcrumb on the translated leaf term page. $term = $this->getLeafTerm(); $translated = $term->getTranslation($this->translateToLangcode); $this->assertBreadcrumb($translated->urlInfo('canonical', ['language' => $languages[$this->translateToLangcode]]), $breadcrumb, $translated->label()); } /** * Test translation of terms are showed in the node. */ public function testTermsTranslation() { // Set the display of the term reference field on the article content type // to "Check boxes/radio buttons". entity_get_form_display('node', 'article', 'default') ->setComponent($this->termFieldName, [ 'type' => 'options_buttons', ]) ->save(); $this->drupalLogin($this->drupalCreateUser(['create article content'])); // Test terms are listed. $this->drupalget('node/add/article'); $this->assertText('one'); $this->assertText('two'); $this->assertText('three'); // Test terms translated are listed. $this->drupalget('hu/node/add/article'); $this->assertText('translatedOne'); $this->assertText('translatedTwo'); $this->assertText('translatedThree'); } /** * Setup translated terms in a hierarchy. */ protected function setUpTerms() { $parent_vid = 0; foreach ($this->termTranslationMap as $name => $translation) { $term = $this->createTerm($this->vocabulary, [ 'name' => $name, 'langcode' => $this->baseLangcode, 'parent' => $parent_vid, ]); $term->addTranslation($this->translateToLangcode, [ 'name' => $translation, ]); $term->save(); // Each term is nested under the last. $parent_vid = $term->id(); $this->terms[] = $term; } } /** * Get the final (leaf) term in the hierarchy. * * @return \Drupal\taxonomy\Entity\Term * The final term in the hierarchy. */ protected function getLeafTerm() { return $this->terms[count($this->termTranslationMap) - 1]; } }