diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php index c7218df..c17649b 100644 --- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php +++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php @@ -89,6 +89,7 @@ protected function setUp() { 'administer themes', 'bypass node access', 'administer content types', + 'translate interface', ] ); // Create and login user. @@ -610,6 +611,49 @@ public function testViewsTranslationUI() { } /** + * Test the number of source elements for plural strings in config translation forms. + */ + public function testPluralConfigStringsSourceElements() { + $this->drupalLogin($this->adminUser); + + // Languages to test, with various number of plural forms. + $languages = array( + 'vi' => array('plurals' => 1, 'expected' => array(TRUE, FALSE, FALSE, FALSE)), + 'fr' => array('plurals' => 2, 'expected' => array(TRUE, TRUE, FALSE, FALSE)), + 'sl' => array('plurals' => 4, 'expected' => array(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 = tempnam('temporary://', $langcode . '_') . '.po'; + file_put_contents($name, $this->getPoFile($data['plurals'])); + $this->drupalPostForm('admin/config/regional/translate/import', array( + 'langcode' => $langcode, + 'files[file]' => $name, + ), t('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/' . $langcode . '/add'; + $this->drupalGet($translation_url); + + // Check if the expected number of source elements are present. + foreach ($data['expected'] as $index => $expected) { + if ($expected) { + $this->assertRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index); + } + else { + $this->assertNoRaw('edit-source-config-names-viewsviewfiles-display-default-display-options-fields-count-format-plural-string-' . $index); + } + } + } + } + + /** * Test translation storage in locale storage. */ public function testLocaleDBStorage() { @@ -936,4 +980,43 @@ protected function assertDisabledTextarea($id) { ))); } + /** + * Helper function that returns a .po file with a given number of plural forms. + */ + public function getPoFile($plurals) { + $po_file = array(); + + $po_file[1] = <<< EOF +msgid "" +msgstr "" +"Project-Id-Version: Drupal 8\\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8bit\\n" +"Plural-Forms: nplurals=1; plural=0;\\n" +EOF; + + $po_file[2] = <<< EOF +msgid "" +msgstr "" +"Project-Id-Version: Drupal 8\\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8bit\\n" +"Plural-Forms: nplurals=2; plural=(n>1);\\n" +EOF; + + $po_file[4] = <<< EOF +msgid "" +msgstr "" +"Project-Id-Version: Drupal 8\\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=UTF-8\\n" +"Content-Transfer-Encoding: 8bit\\n" +"Plural-Forms: nplurals=4; plural=(((n%100)==1)?(0):(((n%100)==2)?(1):((((n%100)==3)||((n%100)==4))?(2):3)));\\n" +EOF; + + return $po_file[$plurals]; + } + }