Index: src/wp-includes/l10n.php
===================================================================
--- src/wp-includes/l10n.php	(revision 43005)
+++ src/wp-includes/l10n.php	(working copy)
@@ -87,20 +87,28 @@
  * @return string The locale of the user.
  */
 function get_user_locale( $user_id = 0 ) {
-	$user = false;
-	if ( 0 === $user_id && function_exists( 'wp_get_current_user' ) ) {
-		$user = wp_get_current_user();
-	} elseif ( $user_id instanceof WP_User ) {
-		$user = $user_id;
-	} elseif ( $user_id && is_numeric( $user_id ) ) {
-		$user = get_user_by( 'id', $user_id );
+	global $current_user;
+
+	if ( empty( $user_id ) ) {
+		// Do not initialize the current user if it's not already set through the bootstrap process.
+		if ( isset( $current_user ) || did_action( 'set_current_user' ) || doing_action( 'init' ) || did_action( 'init' ) ) {
+			$user_id = get_current_user_id();
+		} else {
+
+			/** This filter is documented in wp-includes/user.php */
+			$user_id = apply_filters( 'determine_current_user', false );
+		}
+	}
+
+	if ( $user_id instanceof WP_User ) {
+		$user_id = $user_id->ID;
 	}
 
-	if ( ! $user ) {
+	if ( ! $user_id ) {
 		return get_locale();
 	}
 
-	$locale = $user->locale;
+	$locale = get_user_meta( $user_id, 'locale', true );
 	return $locale ? $locale : get_locale();
 }
 
Index: tests/phpunit/tests/l10n/getUserLocale.php
===================================================================
--- tests/phpunit/tests/l10n/getUserLocale.php	(revision 43005)
+++ tests/phpunit/tests/l10n/getUserLocale.php	(working copy)
@@ -136,4 +136,24 @@
 		$user_locale = get_user_locale( 'string' );
 		$this->assertSame( get_locale(), $user_locale );
 	}
+
+	/**
+	 * @ticket 43869
+	 */
+	public function test_get_user_locale_does_not_initialize_current_user_early() {
+		global $wp_actions;
+
+		unset( $wp_actions['set_current_user'], $wp_actions['init'], $GLOBALS['current_user'] );
+		remove_all_filters( 'determine_current_user' );
+		add_filter( 'determine_current_user', array( $this, 'get_test_user_id' ) );
+
+		$user_locale = get_user_locale();
+
+		$this->assertNull( $GLOBALS['current_user'] );
+		$this->assertSame( 'de_DE', $user_locale );
+	}
+
+	public function get_test_user_id() {
+		return $this->user_id;
+	}
 }
