diff --git a/core/modules/field/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php b/core/modules/field/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
index c3c696a..4213e4b 100644
--- a/core/modules/field/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
+++ b/core/modules/field/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
@@ -43,7 +43,7 @@ class TextTranslationTest extends WebTestBase {
       'bypass node access',
       filter_permission_name($full_html_format),
     ));
-    $this->translator = $this->drupalCreateUser(array('create article content', 'edit own article content', 'translate content'));
+    $this->translator = $this->drupalCreateUser(array('create article content', 'edit own article content', 'translate all content'));
 
     // Enable an additional language.
     $this->drupalLogin($this->admin);
diff --git a/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php b/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
index 09518ab..f9aa0de 100644
--- a/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
+++ b/core/modules/path/lib/Drupal/path/Tests/PathLanguageTest.php
@@ -31,7 +31,7 @@ class PathLanguageTest extends PathTestBase {
     parent::setUp();
 
     // Create and login user.
-    $this->web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'translate content', 'access administration pages'));
+    $this->web_user = $this->drupalCreateUser(array('edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'translate all content', 'access administration pages'));
     $this->drupalLogin($this->web_user);
 
     // Enable French language.
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php
index 819b5f7..84cf03f 100644
--- a/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php
@@ -34,7 +34,7 @@ class PollTranslateTest extends PollTestBase {
    * the vote count values are set to 0.
    */
   function testPollTranslate() {
-    $admin_user = $this->drupalCreateUser(array('administer content types', 'administer languages', 'edit any poll content', 'create poll content', 'administer nodes', 'translate content'));
+    $admin_user = $this->drupalCreateUser(array('administer content types', 'administer languages', 'edit any poll content', 'create poll content', 'administer nodes', 'translate all content'));
 
     // Set up a poll with two choices.
     $title = $this->randomName();
diff --git a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
index a409150..77f7607 100644
--- a/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
+++ b/core/modules/translation/lib/Drupal/translation/Tests/TranslationTest.php
@@ -38,8 +38,8 @@ class TranslationTest extends WebTestBase {
     parent::setUp();
 
     // Setup users.
-    $this->admin_user = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate content'));
-    $this->translator = $this->drupalCreateUser(array('create page content', 'edit own page content', 'translate content'));
+    $this->admin_user = $this->drupalCreateUser(array('bypass node access', 'administer nodes', 'administer languages', 'administer content types', 'administer blocks', 'access administration pages', 'translate all content'));
+    $this->translator = $this->drupalCreateUser(array('create page content', 'edit own page content', 'translate all content'));
 
     $this->drupalLogin($this->admin_user);
 
diff --git a/core/modules/translation/translation.module b/core/modules/translation/translation.module
index ba5c406..c16ae86 100644
--- a/core/modules/translation/translation.module
+++ b/core/modules/translation/translation.module
@@ -37,7 +37,7 @@ function translation_help($path, $arg) {
       $output .= '<dt>' . t('Assigning a language to content') . '</dt>';
       $output .= '<dd>' . t('Use the <em>Language</em> drop down to select the appropriate language when creating or editing content.') . '</dd>';
       $output .= '<dt>' . t('Translating content') . '</dt>';
-      $output .= '<dd>' . t('Users with the <em>translate content</em> permission can translate content, if the content type has been configured to allow translations. To translate content, select the <em>Translations</em> tab when viewing the content, select the language for which you wish to provide content, and then enter the content.') . '</dd>';
+      $output .= '<dd>' . t('Users with the <em>translate all content</em> permission can translate all content, if the content type has been configured to allow translations. To translate all content, select the <em>Translations</em> tab when viewing the content, select the language for which you wish to provide content, and then enter the content.') . '</dd>';
       $output .= '<dt>' . t('Maintaining translations') . '</dt>';
       $output .= '<dd>' . t('If editing content in one language requires that translated versions also be updated to reflect the change, use the <em>Flag translations as outdated</em> check box to mark the translations as outdated and in need of revision. Individual translations may also be marked for revision by selecting the <em>This translation needs to be updated</em> check box on the translation editing form.') . '</dd>';
       $output .= '</dl>';
@@ -67,7 +67,7 @@ function translation_menu() {
 }
 
 /**
- * Access callback: Checks that the user has permission to 'translate content'.
+ * Access callback: Checks that the user has permission to 'translate all content'.
  *
  * Only displays the translation tab for nodes that are not language-neutral
  * of types that have translation enabled.
@@ -81,8 +81,10 @@ function translation_menu() {
  * @see translation_menu()
  */
 function _translation_tab_access($node) {
+  global $user;
+
   if ($node->langcode != LANGUAGE_NOT_SPECIFIED && translation_supported_type($node->type) && node_access('view', $node)) {
-    return user_access('translate content');
+    return user_access('translate all content') || ($node->uid == $user->uid && user_access('translate own content'));
   }
   return FALSE;
 }
@@ -104,8 +106,11 @@ function translation_admin_paths() {
  */
 function translation_permission() {
   return array(
-    'translate content' => array(
-      'title' => t('Translate content'),
+    'translate all content' => array(
+      'title' => t('Translate all content'),
+    ),
+    'translate own content' => array(
+      'title' => t('Translate own content'),
     ),
   );
 }
@@ -154,6 +159,7 @@ function translation_node_type_language_translation_enabled_validate($element, &
  */
 function translation_form_node_form_alter(&$form, &$form_state) {
   if (translation_supported_type($form['#node']->type)) {
+    global $user;
     $node = $form['#node'];
 
     if (!empty($node->translation_source)) {
@@ -176,7 +182,7 @@ function translation_form_node_form_alter(&$form, &$form_state) {
       $form['translation'] = array(
         '#type' => 'fieldset',
         '#title' => t('Translation settings'),
-        '#access' => user_access('translate content'),
+        '#access' => user_access('translate all content') || ($node->uid == $user->uid && user_access('translate own content')),
         '#collapsible' => TRUE,
         '#collapsed' => !$node->translate,
         '#tree' => TRUE,
@@ -266,12 +272,14 @@ function translation_node_view(Node $node, $view_mode) {
  * Implements hook_node_prepare().
  */
 function translation_node_prepare(Node $node) {
+  global $user;
+
   // Only act if we are dealing with a content type supporting translations.
   if (translation_supported_type($node->type) &&
     // And it's a new node.
     empty($node->nid) &&
-    // And the user has permission to translate content.
-    user_access('translate content') &&
+    // And the user has permission to translate all content or own content.
+    (user_access('translate all content') || ($node->uid == $user->uid && user_access('translate own content'))) &&
     // And the $_GET variables are set properly.
     isset($_GET['translation']) &&
     isset($_GET['target']) &&
