diff --git a/core/modules/update/update.module b/core/modules/update/update.module
index 63ed8d0..e35c560 100644
--- a/core/modules/update/update.module
+++ b/core/modules/update/update.module
@@ -532,15 +532,17 @@ function _update_message_text($msg_type, $msg_reason, $report_link = FALSE, $lan
   }
   if ($report_link) {
     if (update_manager_access()) {
-      $text .= ' ' . t('See the <a href="@available_updates">available updates</a> page for more information and to install your missing updates.', array('@available_updates' => \Drupal::url('update.report_update', [], ['language' => $language])), array('langcode' => $langcode));
+      $linktext = t('See the <a href="@available_updates">available updates</a> page for more information and to install your missing updates.', array('@available_updates' => \Drupal::url('update.report_update', [], ['language' => $language])), array('langcode' => $langcode));
     }
     else {
-      $text .= ' ' . t('See the <a href="@available_updates">available updates</a> page for more information.', array('@available_updates' => \Drupal::url('update.status', [], ['language' => $language])), array('langcode' => $langcode));
+      $linktext = t('See the <a href="@available_updates">available updates</a> page for more information.', array('@available_updates' => \Drupal::url('update.status', [], ['language' => $language])), array('langcode' => $langcode));
     }
+    return SafeMarkup::format('@text @linktext', ['@text' => $text, '@linktext' => $linktext]);
+  }
+  else {
+    // Anything in $text has already been through t(), so it is safe.
+    return $text;
   }
-
-  // All strings are t() and empty space concatenated so return SafeMarkup.
-  return SafeMarkup::set($text);
 }
 
 /**
diff --git a/example.gitignore b/example.gitignore
index e2f0124..813a71c 100644
--- a/example.gitignore
+++ b/example.gitignore
@@ -34,3 +34,4 @@ sites/simpletest
 
 # Ignore SimpleTest multi-site environment.
 # simpletest
+*.idea*
