Index: src/wp-admin/includes/schema.php
===================================================================
--- src/wp-admin/includes/schema.php	(revision 39947)
+++ src/wp-admin/includes/schema.php	(working copy)
@@ -621,6 +621,7 @@
 	populate_roles_270();
 	populate_roles_280();
 	populate_roles_300();
+	populate_roles_480();
 }
 
 /**
@@ -861,6 +862,20 @@
 	}
 }
 
+/**
+ * Create and modify WordPress roles for WordPress 4.8.
+ *
+ * @since 4.8.0
+ */
+function populate_roles_480() {
+	$role = get_role( 'administrator' );
+
+	if ( !empty( $role ) ) {
+		$role->add_cap( 'install_translations' );
+		$role->add_cap( 'update_translations' );
+	}
+}
+
 if ( !function_exists( 'install_network' ) ) :
 /**
  * Install Network.
Index: src/wp-admin/network/settings.php
===================================================================
--- src/wp-admin/network/settings.php	(revision 39947)
+++ src/wp-admin/network/settings.php	(working copy)
@@ -63,7 +63,7 @@
 	);
 
 	// Handle translation install.
-	if ( ! empty( $_POST['WPLANG'] ) && wp_can_install_language_pack() ) {  // @todo: Skip if already installed
+	if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_translations' ) && wp_can_install_language_pack() ) {  // @todo: Skip if already installed
 		$language = wp_download_language_pack( $_POST['WPLANG'] );
 		if ( $language ) {
 			$_POST['WPLANG'] = $language;
@@ -342,7 +342,7 @@
 							'selected'     => $lang,
 							'languages'    => $languages,
 							'translations' => $translations,
-							'show_available_translations' => wp_can_install_language_pack(),
+							'show_available_translations' => current_user_can( 'install_translations' ) && wp_can_install_language_pack(),
 						) );
 						?>
 					</td>
Index: src/wp-admin/network/site-new.php
===================================================================
--- src/wp-admin/network/site-new.php	(revision 39947)
+++ src/wp-admin/network/site-new.php	(working copy)
@@ -65,7 +65,7 @@
 	if ( isset( $_POST['WPLANG'] ) ) {
 		if ( '' === $_POST['WPLANG'] ) {
 			$meta['WPLANG'] = ''; // en_US
-		} elseif ( wp_can_install_language_pack() ) {
+		} elseif ( current_user_can( 'install_translations' ) && wp_can_install_language_pack() ) {
 			$language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) );
 			if ( $language ) {
 				$meta['WPLANG'] = $language;
@@ -233,7 +233,7 @@
 						'selected'                    => $lang,
 						'languages'                   => $languages,
 						'translations'                => $translations,
-						'show_available_translations' => wp_can_install_language_pack(),
+						'show_available_translations' => current_user_can( 'install_translations' ) && wp_can_install_language_pack(),
 					) );
 					?>
 				</td>
Index: src/wp-admin/options-general.php
===================================================================
--- src/wp-admin/options-general.php	(revision 39947)
+++ src/wp-admin/options-general.php	(working copy)
@@ -144,7 +144,7 @@
 				'selected'     => $locale,
 				'languages'    => $languages,
 				'translations' => $translations,
-				'show_available_translations' => ( ! is_multisite() || is_super_admin() ) && wp_can_install_language_pack(),
+				'show_available_translations' => current_user_can( 'install_translations' ) && wp_can_install_language_pack(),
 			) );
 
 			// Add note about deprecated WPLANG constant.
Index: src/wp-admin/options.php
===================================================================
--- src/wp-admin/options.php	(revision 39947)
+++ src/wp-admin/options.php	(working copy)
@@ -182,7 +182,7 @@
 		}
 
 		// Handle translation install.
-		if ( ! empty( $_POST['WPLANG'] ) && ( ! is_multisite() || is_super_admin() ) ) { // @todo: Skip if already installed
+		if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_translations' ) ) { // @todo: Skip if already installed
 			require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
 
 			if ( wp_can_install_language_pack() ) {
Index: src/wp-admin/update-core.php
===================================================================
--- src/wp-admin/update-core.php	(revision 39947)
+++ src/wp-admin/update-core.php	(working copy)
@@ -608,15 +608,19 @@
 	echo ' &nbsp; <a class="button" href="' . esc_url( self_admin_url('update-core.php?force-check=1') ) . '">' . __( 'Check Again' ) . '</a>';
 	echo '</p>';
 
-	if ( $core = current_user_can( 'update_core' ) )
+	if ( current_user_can( 'update_core' ) ) {
 		core_upgrade_preamble();
-	if ( $plugins = current_user_can( 'update_plugins' ) )
+	}
+	if ( current_user_can( 'update_plugins' ) ) {
 		list_plugin_updates();
-	if ( $themes = current_user_can( 'update_themes' ) )
+	}
+	if ( current_user_can( 'update_themes' ) ) {
 		list_theme_updates();
-	if ( $core || $plugins || $themes )
+	}
+	if ( current_user_can( 'update_translations' ) ) {
 		list_translation_updates();
-	unset( $core, $plugins, $themes );
+	}
+
 	/**
 	 * Fires after the core, plugin, and theme update tables.
 	 *
@@ -729,7 +733,7 @@
 
 } elseif ( 'do-translation-upgrade' == $action ) {
 
-	if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) )
+	if ( ! current_user_can( 'update_translations' ) )
 		wp_die( __( 'Sorry, you are not allowed to update this site.' ) );
 
 	check_admin_referer( 'upgrade-translations' );
Index: src/wp-includes/capabilities.php
===================================================================
--- src/wp-includes/capabilities.php	(revision 39947)
+++ src/wp-includes/capabilities.php	(working copy)
@@ -378,7 +378,9 @@
 	case 'install_themes':
 	case 'upload_themes':
 	case 'update_core':
-		// Disallow anything that creates, deletes, or updates core, plugin, or theme files.
+	case 'update_translations':
+	case 'install_translations':
+		// Disallow anything that creates, deletes, or updates core, plugin, theme, or translation files.
 		// Files in uploads are excepted.
 		if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) {
 			$caps[] = 'do_not_allow';
Index: tests/phpunit/tests/user/capabilities.php
===================================================================
--- tests/phpunit/tests/user/capabilities.php	(revision 39947)
+++ tests/phpunit/tests/user/capabilities.php	(working copy)
@@ -84,6 +84,8 @@
 			'remove_users'           => array( 'administrator' ),
 			'switch_themes'          => array( 'administrator' ),
 			'edit_dashboard'         => array( 'administrator' ),
+			'install_translations'   => array( 'administrator' ),
+			'update_translations'    => array( 'administrator' ),
 
 			'moderate_comments'      => array( 'administrator', 'editor' ),
 			'manage_categories'      => array( 'administrator', 'editor' ),
@@ -154,6 +156,8 @@
 			'update_core'            => array(),
 			'update_plugins'         => array(),
 			'update_themes'          => array(),
+			'install_translations'   => array(),
+			'update_translations'    => array(),
 
 			'edit_theme_options'     => array( 'administrator' ),
 			'export'                 => array( 'administrator' ),
@@ -416,6 +420,8 @@
 			$expected['delete_users'],
 			$expected['create_users'],
 			$expected['manage_links'],
+			$expected['install_translations'],
+			$expected['update_translations'],
 			// Singular object meta capabilities (where an object ID is passed) are not tested:
 			$expected['remove_user'],
 			$expected['promote_user'],
