diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index eda4352..9221c3d 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -411,4 +411,15 @@ protected function filterLanguages(array $languages, $flags = LanguageInterface:
     return $filtered_languages;
   }
 
+  /**
+   * Deletes a string translation source from the database.
+   *
+   * @param string $lid
+   *   The lid of the translation source to delete.
+   */
+  public function deleteTranslationSource($lid) {
+    db_delete('locales_location')->condition('lid', $lid)->execute();
+    db_delete('locales_source')->condition('lid', $lid)->execute();
+    db_delete('locales_target')->condition('lid', $lid)->execute();
+  }
 }
diff --git a/core/lib/Drupal/Core/Language/LanguageManagerInterface.php b/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
index b536a00..5299716 100644
--- a/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
+++ b/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
@@ -24,6 +24,14 @@
   public function setTranslation(TranslationInterface $translation);
 
   /**
+   * Deletes a string translation source from the database.
+   *
+   * @param string $lid
+   *   The lid of the translation source to delete.
+   */
+  public function deleteTranslationSource($lid);
+
+  /**
    * Returns whether or not the site has more than one language added.
    *
    * @return bool
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index 44e86e7..56fb382 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -50,6 +50,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#header' => [
         $this->t('Source string'),
         $this->t('Translation for @language', ['@language' => $langname]),
+        $this->t('Delete'),
       ],
       '#empty' => $this->t('No strings available.'),
       '#attributes' => ['class' => ['locale-translate-edit-table']],
@@ -135,6 +136,11 @@ public function buildForm(array $form, FormStateInterface $form_state) {
             $form['strings'][$string->lid]['translations'][1]['#title'] = $this->t('Plural form');
           }
         }
+        $form['strings'][$string->lid]['delete'] = array(
+          '#type' => 'checkbox',
+          '#title' => $this->t('Delete string'),
+          '#title_display' => 'invisible',
+        );
       }
       if (count(Element::children($form['strings']))) {
         $form['actions'] = array('#type' => 'actions');
@@ -181,6 +187,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     foreach ($form_state->getValue('strings') as $lid => $new_translation) {
       $existing_translation = isset($existing_translation_objects[$lid]);
 
+      // If the translation is marked for deletion, delete it and continue to
+      // the next iteration.
+      if ($new_translation['delete']) {
+        $this->languageManager->deleteTranslationSource($lid);
+        continue;
+      }
+
       // Plural translations are saved in a delimited string. To be able to
       // compare the new strings with the existing strings a string in the same
       // format is created.
