diff --git a/core/modules/locale/locale.services.yml b/core/modules/locale/locale.services.yml
index 284878b..ff2bfc2 100644
--- a/core/modules/locale/locale.services.yml
+++ b/core/modules/locale/locale.services.yml
@@ -25,3 +25,8 @@ services:
     arguments: ['@config.factory', '@locale.config_manager']
     tags:
       - { name: event_subscriber }
+  locale.locale_translation_cache_tag:
+    class: Drupal\locale\EventSubscriber\LocaleTranslationCacheTag
+    arguments: ['@cache_tags.invalidator']
+    tags:
+      - { name: event_subscriber }
diff --git a/core/modules/locale/src/EventSubscriber/LocaleTranslationCacheTag.php b/core/modules/locale/src/EventSubscriber/LocaleTranslationCacheTag.php
new file mode 100644
index 0000000..6947c71
--- /dev/null
+++ b/core/modules/locale/src/EventSubscriber/LocaleTranslationCacheTag.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\locale\EventSubscriber\LocaleTranslationCacheTag.
+ */
+
+namespace Drupal\locale\EventSubscriber;
+
+use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
+use Drupal\locale\LocaleEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * A subscriber invalidating the 'rendered' cache tag when translating a string.
+ */
+class LocaleTranslationCacheTag implements EventSubscriberInterface {
+
+  /**
+   * The cache tags invalidator.
+   *
+   * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
+   */
+  protected $cacheTagsInvalidator;
+
+  /**
+   * Constructs a ThemeSettingsCacheTag object.
+   *
+   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
+   *   The cache tags invalidator.
+   */
+  public function __construct(CacheTagsInvalidatorInterface $cache_tags_invalidator) {
+    $this->cacheTagsInvalidator = $cache_tags_invalidator;
+  }
+
+  /**
+   * Invalidate the 'rendered' cache tag whenever a string is translated.
+   */
+  public function saveTranslation() {
+    $this->cacheTagsInvalidator->invalidateTags(['rendered']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[LocaleEvents::SAVE_TRANSLATION][] = ['saveTranslation'];
+    return $events;
+  }
+
+}
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index d953dce..1ad993f 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
+use Drupal\locale\LocaleEvents;
 use Drupal\locale\SourceString;
 
 /**
@@ -233,6 +234,9 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       // Clear cache and force refresh of JavaScript translations.
       _locale_refresh_translations(array($langcode), $updated);
       _locale_refresh_configuration(array($langcode), $updated);
+      // Throw locale.save_translation event.
+      $this->eventDispatcher->dispatch(LocaleEvents::SAVE_TRANSLATION);
+
     }
   }
 
diff --git a/core/modules/locale/src/Form/TranslateFormBase.php b/core/modules/locale/src/Form/TranslateFormBase.php
index 59af72b..a848d80 100644
--- a/core/modules/locale/src/Form/TranslateFormBase.php
+++ b/core/modules/locale/src/Form/TranslateFormBase.php
@@ -12,6 +12,7 @@
 use Drupal\locale\StringStorageInterface;
 use Drupal\Core\State\StateInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 
 /**
  * Defines the locale user interface translation form base.
@@ -57,11 +58,14 @@
    *   The state service.
    * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
    *   The language manager.
+   * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
+   *   The event dispatcher.
    */
-  public function __construct(StringStorageInterface $locale_storage, StateInterface $state, LanguageManagerInterface $language_manager) {
+  public function __construct(StringStorageInterface $locale_storage, StateInterface $state, LanguageManagerInterface $language_manager, EventDispatcherInterface $event_dispatcher) {
     $this->localeStorage = $locale_storage;
     $this->state = $state;
     $this->languageManager = $language_manager;
+    $this->eventDispatcher = $event_dispatcher;
   }
 
   /**
@@ -71,7 +75,8 @@ public static function create(ContainerInterface $container) {
     return new static(
       $container->get('locale.storage'),
       $container->get('state'),
-      $container->get('language_manager')
+      $container->get('language_manager'),
+      $container->get('event_dispatcher')
     );
   }
 
diff --git a/core/modules/locale/src/LocaleEvents.php b/core/modules/locale/src/LocaleEvents.php
new file mode 100644
index 0000000..40fe24f
--- /dev/null
+++ b/core/modules/locale/src/LocaleEvents.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Config\LanguageConfigOverrideEvents.
+ */
+
+namespace Drupal\locale;
+
+/**
+ * Defines events for locale translation.
+ *
+ * @see \Drupal\Core\Config\ConfigCrudEvent
+ */
+final class LocaleEvents {
+
+  /**
+   * The name of the event fired when saving the configuration override.
+   *
+   * This event allows you to perform custom actions whenever a language config
+   * override is saved. The event listener method receives a
+   * \Drupal\language\Config\LanguageConfigOverrideCrudEvent instance.
+   *
+   * @Event
+   *
+   * @see \Drupal\language\Config\LanguageConfigOverrideCrudEvent
+   * @see \Drupal\language\Config\LanguageConfigOverride::save()
+   * @see \Drupal\locale\LocaleConfigSubscriber
+   */
+  const SAVE_TRANSLATION = 'locale.save_translation';
+
+}
