Index: src/wp-admin/includes/translation-install.php
===================================================================
--- src/wp-admin/includes/translation-install.php	(revision 29648)
+++ src/wp-admin/includes/translation-install.php	(working copy)
@@ -210,3 +210,29 @@
 	$result = $upgrader->upgrade( $translation, array( 'clear_update_cache' => false ) );
 	return $translation->language;
 }
+
+/**
+ * Check if WordPress has access to the filesystem without asking for
+ * credentials.
+ *
+ * @since 4.0.0
+ *
+ * @return bool Returns true on success false on failure.
+ */
+function wp_can_install_language_pack_directly() {
+	if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) {
+		return false;
+	}
+
+	require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
+	$skin = new Automatic_Upgrader_Skin;
+	$upgrader = new Language_Pack_Upgrader( $skin );
+
+	$check = $upgrader->fs_connect( array( WP_CONTENT_DIR, WP_LANG_DIR ) );
+
+	if ( ! $check || is_wp_error( $check ) ) {
+		return false;
+	}
+
+	return true;
+}
Index: src/wp-admin/install.php
===================================================================
--- src/wp-admin/install.php	(revision 29648)
+++ src/wp-admin/install.php	(working copy)
@@ -189,7 +189,7 @@
 switch($step) {
 	case 0: // Step 0
 
-		if ( empty( $langugage ) && ( $languages = wp_get_available_translations() ) ) {
+		if ( wp_can_install_language_pack_directly() && empty( $langugage ) && ( $languages = wp_get_available_translations() ) ) {
 			display_header( 'language-chooser' );
 			echo '<form id="setup" method="post" action="?step=1">';
 			wp_install_language_form( $languages );
Index: src/wp-admin/setup-config.php
===================================================================
--- src/wp-admin/setup-config.php	(revision 29648)
+++ src/wp-admin/setup-config.php	(working copy)
@@ -95,7 +95,7 @@
 }
 switch($step) {
 	case -1:
-		if ( empty( $language ) && ( $languages = wp_get_available_translations() ) ) {
+		if ( wp_can_install_language_pack_directly() && empty( $language ) && ( $languages = wp_get_available_translations() ) ) {
 			setup_config_display_header( 'language-chooser' );
 			echo '<form id="setup" method="post" action="?step=0">';
 			wp_install_language_form( $languages );
