ConfigTranslationPluralUiTest.php

Same filename and directory in other branches
  1. main core/modules/config_translation/tests/src/Functional/ConfigTranslationPluralUiTest.php

Namespace

Drupal\Tests\config_translation\Functional

File

core/modules/config_translation/tests/src/Functional/ConfigTranslationPluralUiTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\config_translation\Functional;

use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
// cspell:ignore anonyme viewsviewfiles

/**
 * Translate settings and entities to various languages.
 */
class ConfigTranslationPluralUiTest extends ConfigTranslationUiTestBase {
  
  /**
   * Tests plural source elements in configuration translation forms.
   */
  public function testPluralConfigStringsSourceElements() : void {
    $this->drupalLogin($this->adminUser);
    // Languages to test, with various number of plural forms.
    $languages = [
      'vi' => [
        'plurals' => 1,
        'expected' => [
          TRUE,
          FALSE,
          FALSE,
          FALSE,
        ],
      ],
      'fr' => [
        'plurals' => 2,
        'expected' => [
          TRUE,
          TRUE,
          FALSE,
          FALSE,
        ],
      ],
      'sl' => [
        'plurals' => 4,
        'expected' => [
          TRUE,
          TRUE,
          TRUE,
          TRUE,
        ],
      ],
    ];
    foreach ($languages as $langcode => $data) {
      // Import a .po file to add a new language with a given number of plural
      // forms.
      $name = \Drupal::service('file_system')->tempnam('temporary://', $langcode . '_') . '.po';
      file_put_contents($name, $this->getPoFile($data['plurals']));
      $this->drupalGet('admin/config/regional/translate/import');
      $this->submitForm([
        'langcode' => $langcode,
        'files[file]' => $name,
      ], 'Import');
      // Change the config langcode of the 'files' view.
      $config = \Drupal::service('config.factory')->getEditable('views.view.files');
      $config->set('langcode', $langcode);
      $config->save();
      // Go to the translation page of the 'files' view.
      $translation_url = 'admin/structure/views/view/files/translate/en/add';
      $this->drupalGet($translation_url);
      // Check if the expected number of source elements are present.
      foreach ($data['expected'] as $index => $expected) {
        if ($expected) {
          $this->assertSession()
            ->responseContains('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
        }
        else {
          $this->assertSession()
            ->responseNotContains('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index);
        }
      }
    }
  }
  
  /**
   * Tests translation of plural strings with multiple plural forms in config.
   */
  public function testPluralConfigStrings() : void {
    $this->drupalLogin($this->adminUser);
    // First import a .po file with multiple plural forms.
    // This will also automatically add the 'sl' language.
    $name = \Drupal::service('file_system')->tempnam('temporary://', "sl_") . '.po';
    file_put_contents($name, $this->getPoFile(4));
    $this->drupalGet('admin/config/regional/translate/import');
    $this->submitForm([
      'langcode' => 'sl',
      'files[file]' => $name,
    ], 'Import');
    // Translate the files view, as this one uses numeric formatters.
    $description = 'Singular form';
    $field_value = '@count place';
    $field_value_plural = '@count places';
    $translation_url = 'admin/structure/views/view/files/translate/sl/add';
    $this->drupalGet($translation_url);
    // Make sure original text is present on this page, in addition to 2 new
    // empty fields.
    $this->assertSession()
      ->pageTextContains($description);
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', $field_value);
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', $field_value_plural);
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', '');
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', '');
    // Then make sure it also works.
    $edit = [
      'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]' => $field_value . ' SL',
      'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]' => $field_value_plural . ' 1 SL',
      'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]' => $field_value_plural . ' 2 SL',
      'translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]' => $field_value_plural . ' 3 SL',
    ];
    $this->drupalGet($translation_url);
    $this->submitForm($edit, 'Save translation');
    // Make sure the values have changed.
    $this->drupalGet($translation_url);
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][0]', "{$field_value} SL");
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][1]', "{$field_value_plural} 1 SL");
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][2]', "{$field_value_plural} 2 SL");
    $this->assertSession()
      ->fieldValueEquals('translation[config_names][views.view.files][display][default][display_options][fields][count][format_plural_string][3]', "{$field_value_plural} 3 SL");
  }

}

Classes

Title Deprecated Summary
ConfigTranslationPluralUiTest Translate settings and entities to various languages.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.