Index: src/wp-includes/ms-functions.php
===================================================================
--- src/wp-includes/ms-functions.php	(revision 41057)
+++ src/wp-includes/ms-functions.php	(working copy)
@@ -1153,12 +1153,12 @@
  *                        updated. Otherwise, keys and values will be used to set options for
  *                        the new site. Default empty array.
  * @param int    $site_id Optional. Only relevant on multi-network installs.
- * @return int|WP_Error Returns WP_Error object on failure, int $blog_id on success
+ * @return int|WP_Error Returns WP_Error object on failure, the new site ID on success.
  */
 function wpmu_create_blog( $domain, $path, $title, $user_id, $meta = array(), $site_id = 1 ) {
 	$defaults = array(
 		'public' => 0,
-		'WPLANG' => get_site_option( 'WPLANG' ),
+		'WPLANG' => get_network_option( $site_id, 'WPLANG' ),
 	);
 	$meta = wp_parse_args( $meta, $defaults );
 
@@ -1208,11 +1208,11 @@
 	 *
 	 * @since MU
 	 *
-	 * @param int    $blog_id Blog ID.
+	 * @param int    $blog_id Site ID.
 	 * @param int    $user_id User ID.
 	 * @param string $domain  Site domain.
 	 * @param string $path    Site path.
-	 * @param int    $site_id Site ID. Only relevant on multi-network installs.
+	 * @param int    $site_id Network ID. Only relevant on multi-network installs.
 	 * @param array  $meta    Meta data. Used to set initial site options.
 	 */
 	do_action( 'wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta );
Index: tests/phpunit/tests/multisite/site.php
===================================================================
--- tests/phpunit/tests/multisite/site.php	(revision 41057)
+++ tests/phpunit/tests/multisite/site.php	(working copy)
@@ -10,6 +10,7 @@
  */
 class Tests_Multisite_Site extends WP_UnitTestCase {
 	protected $suppress = false;
+	protected static $network_ids;
 
 	function setUp() {
 		global $wpdb;
@@ -23,6 +24,26 @@
 		parent::tearDown();
 	}
 
+	public static function wpSetUpBeforeClass( $factory ) {
+		self::$network_ids = array(
+			'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/' ),
+		);
+
+		foreach ( self::$network_ids as &$id ) {
+			$id = $factory->network->create( $id );
+		}
+		unset( $id );
+	}
+
+	public static function wpTearDownAfterClass() {
+		global $wpdb;
+
+		foreach( self::$network_ids as $id ) {
+			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE site_id = %d", $id ) );
+			$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->site} WHERE id= %d", $id ) );
+		}
+	}
+
 	function test_switch_restore_blog() {
 		global $_wp_switched_stack, $wpdb;
 
@@ -981,6 +1002,22 @@
 	}
 
 	/**
+	 * @ticket 40503
+	 */
+	function test_different_network_language() {
+		$network = get_network( self::$network_ids['make.wordpress.org/'] );
+
+		add_filter( 'sanitize_option_WPLANG', array( $this, 'filter_allow_unavailable_languages' ), 10, 3 );
+
+		update_network_option( self::$network_ids['make.wordpress.org/'], 'WPLANG', 'wibble' );
+		$blog_id = wpmu_create_blog( $network->domain, '/de-de/', 'New Blog', get_current_user_id(), array(), $network->id );
+
+		remove_filter( 'sanitize_option_WPLANG', array( $this, 'filter_allow_unavailable_languages' ), 10 );
+
+		$this->assertSame( get_network_option( self::$network_ids['make.wordpress.org/'], 'WPLANG' ), get_blog_option( $blog_id, 'WPLANG' ) );
+	}
+
+	/**
 	 * Allows to set the WPLANG option to any language.
 	 *
 	 * @param string $value          The sanitized option value.
