Sending a custom email in the users prefered locale
You can translate string in PHP and Twig via translate function

public static function t($message, $variables = array(), $source = null, $language = null, $category = 'craft')


Twig

{{ 'my string'|t() }}


PHP

Craft::t('my string');


So all you need to do is to wrap every string in your templates within the translate filter and pass the preferred local as an argument. For example 

{{ 'my latest news'|t([], null, currentUser.locale) }}


If no parameter is set, Craft will use craft()-&gt;getLanguage() by default so you can do the following as well

$tmpLocale = craft()-&gt;getLanguage();
$user = craft()-&gt;userSession-&gt;getUser();
craft()-&gt;setLanguage($user-&gt;locale);
$content = craft()-&gt;templates-&gt;render(
   '_emails/notification',
   [
       'userInfo' =&gt; $this-&gt;generateUserInfo($newUser),
   ]
); 
$craft-&gt;setLanguage($tmpLocale);