Index: src/wp-admin/includes/upgrade.php
===================================================================
--- src/wp-admin/includes/upgrade.php	(revision 29016)
+++ src/wp-admin/includes/upgrade.php	(working copy)
@@ -2160,21 +2160,46 @@
 endif;
 
 function wp_install_language_form( $body ) {
+
 	echo "<fieldset>\n";
 	echo "<legend class='screen-reader-text'>Select a default language</legend>\n";
 	echo '<input type="radio" checked="checked" class="screen-reader-input" name="language" id="language_default" value="">';
 	echo '<label for="language_default">English (United States)</label>';
 	echo "\n";
 
-	if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && ( 'en_US' !== WPLANG ) ) {
+	$shown = array(
+		'en_US' => true
+	);
+
+	if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && !isset( $shown[WPLANG] ) ) {
 		if ( isset( $body['languages'][WPLANG] ) ) {
+			$shown[WPLANG] = true;
 			$language = $body['languages'][WPLANG];
 			echo '<input type="radio" name="language" checked="checked" class="' . esc_attr( $language['language'] ) . ' screen-reader-input" id="language_wplang" value="' . esc_attr( $language['language'] ) . '">';
 			echo '<label for="language_wplang">' . esc_html( $language['native_name'] ) . "</label>\n";
 		}
 	}
 
+	$top_accepted = false;
+	foreach ( wp_get_browser_accepted_languages() as $accepted_language ) {
+
+		if ( isset( $shown[$accepted_language] ) ) {
+			continue;
+		}
+		if ( isset( $body['languages'][$accepted_language] ) ) {
+			$shown[$accepted_language] = true;
+			$language = $body['languages'][$accepted_language];
+			echo '<input type="radio" name="language" ' . checked( $top_accepted, false, false ) . 'class="' . esc_attr( $language['language'] ) . ' screen-reader-input" id="language_accepted_' . esc_attr( $language['language'] ) . '" value="' . esc_attr( $language['language'] ) . '">';
+			echo '<label for="language_accepted_' . esc_attr( $language['language'] ) . '">' . esc_html( $language['native_name'] ) . "</label>\n";
+		}
+		$top_accepted = $accepted_language;
+
+	}
+
 	foreach ( $body['languages'] as $language ) {
+		if ( isset( $shown[$language['language']] ) ) {
+			continue;
+		}
 		echo '<input type="radio" name="language" class="' . esc_attr( $language['language'] ) . ' screen-reader-input" id="language_'. esc_attr( $language['language'] ) .'" value="' . esc_attr( $language['language'] ) . '">';
 		echo '<label for="language_' . esc_attr( $language['language'] ) . '">' . esc_html( $language['native_name'] ) . "</label>\n";
 	}
@@ -2182,8 +2207,34 @@
 	echo '<p class="step"><input type="submit" class="button button-primary button-hero" value="&raquo;" /></p>';
 }
 
+function wp_get_browser_accepted_languages() {
+	if ( empty( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) {
+		return array();
+	}
+
+	$langs = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
+	$codes = array();
+
+	foreach ( $langs as $lang ) {
+		$lang = str_replace( '-', '_', trim( $lang ) );
+		if ( preg_match( '#^([^;]+);q=(0\.[0-9]{1,3})#', $lang, $m ) ) {
+			$lang = $m[1];
+			$codes[$lang] = floatval( $m[2] );
+		} else {
+			$codes[$lang] = 1.0;
+		}
+	}
+
+	arsort( $codes );
+	$accepted = array_keys( $codes );
+	return $accepted;
+
+}
+
 /**
- * @todo rename, move
+ * Get available languages from translations API
+ *
+ * @return boolean|array
  */
 function wp_get_available_translations() {
 	$url = 'http://api.wordpress.org/translations/core/1.0/';
