PHPMailer\PHPMailer

PHPMailer::setLanguage()publicWP 1.0

Set the language for error messages. The default language is English.

{} It's a method of the class: PHPMailer{}

No Hooks.

Return

true|false. Returns true if the requested language was loaded, false otherwise.

Usage

$PHPMailer = new PHPMailer();
$PHPMailer->setLanguage( $langcode, $lang_path );
$langcode(string)
ISO 639-1 2-character language code (e.g. French is "fr") Optionally, the language code can be enhanced with a 4-character script annotation and/or a 2-character country annotation.
Default: 'en'
$lang_path(string)
Path to the language file directory, with trailing separator (slash) Do not set this from user input!
Default: ''

Code of PHPMailer::setLanguage() WP 6.0

public function setLanguage($langcode = 'en', $lang_path = '')
{
    //Backwards compatibility for renamed language codes
    $renamed_langcodes = [
        'br' => 'pt_br',
        'cz' => 'cs',
        'dk' => 'da',
        'no' => 'nb',
        'se' => 'sv',
        'rs' => 'sr',
        'tg' => 'tl',
        'am' => 'hy',
    ];

    if (array_key_exists($langcode, $renamed_langcodes)) {
        $langcode = $renamed_langcodes[$langcode];
    }

    //Define full set of translatable strings in English
    $PHPMAILER_LANG = [
        'authenticate' => 'SMTP Error: Could not authenticate.',
        'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' .
            ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .
            ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',
        'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
        'data_not_accepted' => 'SMTP Error: data not accepted.',
        'empty_message' => 'Message body empty',
        'encoding' => 'Unknown encoding: ',
        'execute' => 'Could not execute: ',
        'extension_missing' => 'Extension missing: ',
        'file_access' => 'Could not access file: ',
        'file_open' => 'File Error: Could not open file: ',
        'from_failed' => 'The following From address failed: ',
        'instantiate' => 'Could not instantiate mail function.',
        'invalid_address' => 'Invalid address: ',
        'invalid_header' => 'Invalid header name or value',
        'invalid_hostentry' => 'Invalid hostentry: ',
        'invalid_host' => 'Invalid host: ',
        'mailer_not_supported' => ' mailer is not supported.',
        'provide_address' => 'You must provide at least one recipient email address.',
        'recipients_failed' => 'SMTP Error: The following recipients failed: ',
        'signing' => 'Signing Error: ',
        'smtp_code' => 'SMTP code: ',
        'smtp_code_ex' => 'Additional SMTP info: ',
        'smtp_connect_failed' => 'SMTP connect() failed.',
        'smtp_detail' => 'Detail: ',
        'smtp_error' => 'SMTP server error: ',
        'variable_set' => 'Cannot set or reset variable: ',
    ];
    if (empty($lang_path)) {
        //Calculate an absolute path so it can work if CWD is not here
        $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
    }

    //Validate $langcode
    $foundlang = true;
    $langcode  = strtolower($langcode);
    if (
        !preg_match('/^(?P<lang>[a-z]{2})(?P<script>_[a-z]{4})?(?P<country>_[a-z]{2})?$/', $langcode, $matches)
        && $langcode !== 'en'
    ) {
        $foundlang = false;
        $langcode = 'en';
    }

    //There is no English translation file
    if ('en' !== $langcode) {
        $langcodes = [];
        if (!empty($matches['script']) && !empty($matches['country'])) {
            $langcodes[] = $matches['lang'] . $matches['script'] . $matches['country'];
        }
        if (!empty($matches['country'])) {
            $langcodes[] = $matches['lang'] . $matches['country'];
        }
        if (!empty($matches['script'])) {
            $langcodes[] = $matches['lang'] . $matches['script'];
        }
        $langcodes[] = $matches['lang'];

        //Try and find a readable language file for the requested language.
        $foundFile = false;
        foreach ($langcodes as $code) {
            $lang_file = $lang_path . 'phpmailer.lang-' . $code . '.php';
            if (static::fileIsAccessible($lang_file)) {
                $foundFile = true;
                break;
            }
        }

        if ($foundFile === false) {
            $foundlang = false;
        } else {
            $lines = file($lang_file);
            foreach ($lines as $line) {
                //Translation file lines look like this:
                //$PHPMAILER_LANG['authenticate'] = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';
                //These files are parsed as text and not PHP so as to avoid the possibility of code injection
                //See https://blog.stevenlevithan.com/archives/match-quoted-string
                $matches = [];
                if (
                    preg_match(
                        '/^\$PHPMAILER_LANG\[\'([a-z\d_]+)\'\]\s*=\s*(["\'])(.+)*?\2;/',
                        $line,
                        $matches
                    ) &&
                    //Ignore unknown translation keys
                    array_key_exists($matches[1], $PHPMAILER_LANG)
                ) {
                    //Overwrite language-specific strings so we'll never have missing translation keys.
                    $PHPMAILER_LANG[$matches[1]] = (string)$matches[3];
                }
            }
        }
    }
    $this->language = $PHPMAILER_LANG;

    return $foundlang; //Returns false if language not found
}