2012-02-10 16 views
0

私はPHPでウェブサイトを構築しており、gettextを使って翻訳を処理しています。これまでのところすべてが完璧ですが、ある時点でウェブサイトがユーザーに電子メールを送信し、電子メールを翻訳することができません。gettextを使ってajaxコール内のメールを翻訳する

私は.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; 
    } 

/en_US.utf8の/ estribo.mo私はすべての文字列を翻訳していると私はこのようなページの任意の場所に訴えるときには正常に動作します:

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

それは私が変数(文字列)の内容と同じことを行うときに、この方法はrpoblemは私が後になることです完璧に翻訳します画面上に印刷するのではなく、メールで送信してください。

これは、電子メール(checkout.php)のために私のコードです:私はcheckout.phpに着く

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

mail($email, $subject, $message); 

方法は、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変数が翻訳されていません

+1

「翻訳中」はどうですか? –

+0

gettextを使用して質問を更新してください。 –

答えて

4

私が考えることができるもっともらしい理由:

AJAX経由でcheckout.phpを直接呼び出すと、gettextの環境は設定されません。

私は、あなたがブラウザ経由であなたのウェブサイトにアクセスし、index.phpまたは類似のエントリポイントを使用するときに起こる何らかの種類のブートストラッププロセスがあると仮定します。 AJAX呼び出しをcheckout.phpに直接向けると、このブートストラップ処理が省略されることがあります。

+0

たぶん私はcheckout.phpの中でもう一度やり直さなければならないかもしれませんね。//それをやっていません。それは、時には正しい方向に向ける必要があります。 –

関連する問題