The translation is done before the message is sent to sendFromSystem, which is why it's not translating based off the recipient users language. Have added a bug ticket to look into changing when the translation is done to allow language switching or to directly implement language switching into CB Reconfirm Email. You can try the below quickfix to see if it'll help.
IN: components/com_comprofiler/plugin/user/plug_cbreconfirmemail/cbreconfirmemail.php
ON: Lines 173 - 174
FROM:
Code:
$mailSubject = Get::clean( $cbUser->replaceUserVars( $this->params->get( 'reconfirm_subject', 'Your email address has changed' ), true, false, $extra ), GetterInterface::STRING );
$mailBody = Get::clean( $cbUser->replaceUserVars( $this->params->get( 'reconfirm_body', 'The email address attached to your account [username] has changed to [new_email] and requires confirmation.<br><br>You can confirm your email address by clicking on the following link:<br><a href="[reconfirm]">[reconfirm]</a><br><br>If this was done in error please contact administration or cancel by <a href="[cancel]">clicking here</a>.' ), false, false, $extra ), GetterInterface::HTML );
TO:
Code:
$mailSubject = Get::clean( $cbUser->replaceUserVars( $this->params->get( 'reconfirm_subject', 'Your email address has changed' ), true, false, $extra, false ), GetterInterface::STRING );
$mailBody = Get::clean( $cbUser->replaceUserVars( $this->params->get( 'reconfirm_body', 'The email address attached to your account [username] has changed to [new_email] and requires confirmation.<br><br>You can confirm your email address by clicking on the following link:<br><a href="[reconfirm]">[reconfirm]</a><br><br>If this was done in error please contact administration or cancel by <a href="[cancel]">clicking here</a>.' ), false, false, $extra, false ), GetterInterface::HTML );
Basically just adding ", false" after $extra in those 2 variables replaceUserVars usage to turn off their CBTxt parsing of the string. This will let cbNotification do it instead.
forge.joomlapolis.com/issues/5833