Index: src/wp-signup.php
===================================================================
--- src/wp-signup.php	(revision 33998)
+++ src/wp-signup.php	(working copy)
@@ -121,6 +121,56 @@
 	echo '<input name="blog_title" type="text" id="blog_title" value="'.esc_attr($blog_title).'" />';
 	?>
 
+	<?php
+	// Site Language.
+
+	/**
+	 * Filter the list of available languages for front-end site signups.
+	 *
+	 * Passing an empty array to this hook will effectively disable output of the setting
+	 * on the signup form, and the default language will be used when creating the site.
+	 *
+	 * Languages not already installed will be stripped.
+	 *
+	 * @since 4.4.0
+	 *
+	 * @param array $available_languages Available languages.
+	 */
+	$languages = (array) apply_filters( 'signup_available_languages', get_available_languages() );
+
+	/*
+	 * Strip any not-installed languages.
+	 *
+	 * We re-call get_available_languages() here in case a language pack was installed
+	 * in the 'signup_available_languages' callback before this point.
+	 */
+	$languages = array_intersect_assoc( $languages, get_available_languages() );
+
+	if ( ! empty( $languages ) ) :
+		?>
+		<p>
+			<label for="site-language"><?php _e( 'Site Language' ); ?></label>
+			<br />
+			<?php
+			// Network default.
+			$lang = get_site_option( 'WPLANG' );
+
+			// Use English if the default isn't available.
+			if ( ! in_array( $lang, $languages ) ) {
+				$lang = '';
+			}
+
+			wp_dropdown_languages( array(
+				'name'                        => 'WPLANG',
+				'id'                          => 'site-language',
+				'selected'                    => $lang,
+				'languages'                   => $languages,
+				'show_available_translations' => false,
+			) );
+			?>
+		</p>
+	<?php endif; // Languages. ?>
+
 	<div id="privacy">
         <p class="privacy-intro">
             <label for="blog_public_on"><?php _e('Privacy:') ?></label>
@@ -330,6 +380,14 @@
 		'public'  => $public
 	);
 
+	// Handle the language setting for the new site.
+	if ( ! empty( $_POST['WPLANG'] ) ) {
+		$language = wp_unslash( sanitize_text_field( $_POST['WPLANG'] ) );
+		if ( $language ) {
+			$blog_meta_defaults['WPLANG'] = $language;
+		}
+	}
+
 	/**
 	 * Filter the new site meta variables.
 	 *
@@ -339,6 +397,7 @@
 	 * @param array $blog_meta_defaults An array of default blog meta variables.
 	 */
 	$meta_defaults = apply_filters( 'signup_create_blog_meta', $blog_meta_defaults );
+
 	/**
 	 * Filter the new default site meta variables.
 	 *
