Pass User object to Token::replace
The current-user token will always take its data from the current user, you can't override it with parameters. See user_tokens:
if ($type == 'current-user') {
  $account = User::load(\Drupal::currentUser()
    -&gt;id());
  $bubbleable_metadata
    -&gt;addCacheContexts([
    'user',
  ]);
  $replacements += $token_service
    -&gt;generate('user', $tokens, array(
    'user' =&gt; $account,
  ), $options, $bubbleable_metadata);
}

If you need to control the account object used for the token, use user instead
$message = 'Hey, [user:account-name]';
$message_value = $token-&gt;replace($message, ['user' =&gt; $account]);