You are here

public function LocaleExportTest::testExportTranslation in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/locale/tests/src/Functional/LocaleExportTest.php \Drupal\Tests\locale\Functional\LocaleExportTest::testExportTranslation()

Tests exportation of translations.

File

core/modules/locale/tests/src/Functional/LocaleExportTest.php, line 53

Class

LocaleExportTest
Tests the exportation of locale files.

Namespace

Drupal\Tests\locale\Functional

Code

public function testExportTranslation() {
  $file_system = \Drupal::service('file_system');

  // First import some known translations.
  // This will also automatically add the 'fr' language.
  $name = $file_system
    ->tempnam('temporary://', "po_") . '.po';
  file_put_contents($name, $this
    ->getPoFile());
  $this
    ->drupalGet('admin/config/regional/translate/import');
  $this
    ->submitForm([
    'langcode' => 'fr',
    'files[file]' => $name,
  ], 'Import');
  $file_system
    ->unlink($name);

  // Get the French translations.
  $this
    ->drupalGet('admin/config/regional/translate/export');
  $this
    ->submitForm([
    'langcode' => 'fr',
  ], 'Export');

  // Ensure we have a translation file.
  $this
    ->assertSession()
    ->pageTextContains('# French translation of Drupal');

  // Ensure our imported translations exist in the file.
  $this
    ->assertSession()
    ->pageTextContains('msgstr "lundi"');

  // Import some more French translations which will be marked as customized.
  $name = $file_system
    ->tempnam('temporary://', "po2_") . '.po';
  file_put_contents($name, $this
    ->getCustomPoFile());
  $this
    ->drupalGet('admin/config/regional/translate/import');
  $this
    ->submitForm([
    'langcode' => 'fr',
    'files[file]' => $name,
    'customized' => 1,
  ], 'Import');
  $file_system
    ->unlink($name);

  // Create string without translation in the locales_source table.
  $this->container
    ->get('locale.storage')
    ->createString()
    ->setString('February')
    ->save();

  // Export only customized French translations.
  $this
    ->drupalGet('admin/config/regional/translate/export');
  $this
    ->submitForm([
    'langcode' => 'fr',
    'content_options[not_customized]' => FALSE,
    'content_options[customized]' => TRUE,
    'content_options[not_translated]' => FALSE,
  ], 'Export');

  // Ensure we have a translation file.
  $this
    ->assertSession()
    ->pageTextContains('# French translation of Drupal');

  // Ensure the customized translations exist in the file.
  $this
    ->assertSession()
    ->pageTextContains('msgstr "janvier"');

  // Ensure no untranslated strings exist in the file.
  $this
    ->assertSession()
    ->responseNotContains('msgid "February"');

  // Export only untranslated French translations.
  $this
    ->drupalGet('admin/config/regional/translate/export');
  $this
    ->submitForm([
    'langcode' => 'fr',
    'content_options[not_customized]' => FALSE,
    'content_options[customized]' => FALSE,
    'content_options[not_translated]' => TRUE,
  ], 'Export');

  // Ensure we have a translation file.
  $this
    ->assertSession()
    ->pageTextContains('# French translation of Drupal');

  // Ensure no customized translations exist in the file.
  $this
    ->assertSession()
    ->responseNotContains('msgstr "janvier"');

  // Ensure the untranslated strings exist in the file, and with right quotes.
  $this
    ->assertSession()
    ->responseContains($this
    ->getUntranslatedString());
}