使用gettext在ajax调用中翻译电子邮件



我正在php中构建一个网站,并使用gettext处理翻译。到目前为止,一切都很完美,但网站在某个时候会向用户发送一封电子邮件,而我无法翻译电子邮件。

我使用.mo文件翻译网站,并在一次会议上选择了我将使用的语言:

    $lang=$_SESSION['lang'];
switch ($lang){
    case 'en':
        setlocale(LC_ALL, 'en_US.utf8'); 
        putenv('LC_ALL=en_US.utf8');
        bindtextdomain("estribo", "locale");
        bind_textdomain_codeset("estribo", 'UTF-8'); 
        textdomain("estribo");
    break;
    case 'es':
        putenv('LC_ALL=es_ES.utf8');
        setlocale(LC_ALL, 'es_ES.utf8');
        bindtextdomain("estribo", "locale");
        bind_textdomain_codeset("estribo", 'UTF-8'); 
        textdomain("estribo");
    break;
     }

在locale/en_US.utf8/estribo.mo中,我已经翻译了所有的字符串,当我在页面中的任何地方使用它时,它都可以正常工作,例如:

   <a href="index.php"><?echo _("Index");?></a>

它将以这种方式完美地翻译,问题是当我对变量(字符串)的内容进行同样的处理时,我稍后将通过邮件发送它,而不是将它打印在屏幕上。

这是我的电子邮件代码(checkout.php):

$message = _("Some text to send via email").": n";
//a few more lines of 
$message .= _("Some more text").": n";
mail($email, $subject, $message);

我访问checkout.php的方法是通过ajax:

 function () {
    $.post('checkout.php', {
        cart: this.cart.items,
        total: this.format(this.total),
        quantity: this.quantity,
        shipping: $('select.shipping').val(),
        tipopago: $('input.tipopago').val(),
        customer: $('#checkout-form').serialize()
    }, function (result) {
            window.location.href = result;
        });
    return true;
}

一切正常,字符串在.mo文件中被翻译,但$message变量没有翻译

我能想到的最可能的原因:

当您通过AJAX直接调用checkout.php时,gettext的环境没有配置。

我假设你有某种引导过程,当你通过浏览器访问你的网站并使用index.php或类似的东西作为入口点时,就会发生这种过程。如果将AJAX调用直接指向checkout.php,则可能会省略此引导过程。

最新更新