2012-03-06 17 views
2

JS Gettextを使用するには、次のコードを使用します。コードブロックは実行されませんが、関数は定義されます

if (lang == "de") { 
    var gt = new Gettext({"domain": "tag_cloud", "locale_data": json_de_data}); 
    function _(ident) { 
     console.debug('gt.gettext("'+ident+'")'); 
     return gt.gettext(ident); 
    } 
    console.debug("Using Gettext."); 
} 
else { 
    function _(ident) { 
     console.debug('return "'+ident+'"'); 
     return ident; 
    } 
    console.debug("Using no translation."); 
} 

Firefoxでは、コンソールは示しています。他のすべてのブラウザで

Using Gettext. 
gt.gettext("Ubiqitous, but effective.") 

(Chromiun、オペラ、IE、rekonq、サファリ)、私はこの取得:

Using Gettext. 
return "Ubiqitous, but effective." 

私が試しましたelseブロックを削除し、それはすべてのブラウザで機能しました。

elseブロックは実行されませんが、後者は_()と定義されていますか?すべてのブラウザでこの作業を行うにはどうすればよいですか?

答えて

3

function _(ident) {}関数宣言は実行時の前に評価されます。これは解析時です。

var _ = function(ident) {}に変更できます。この方法では、実行時に_が割り当てられます。

はさらに読書を取得:Named function expressions demystified

+0

さて、それは面白いです。 FirefoxのJavascriptエンジンのバグだと思いますか? –

+0

最初の方法はブラウザに依存しているので、 'var _ = function(ident){}'という2番目の方法を使うべきです。 – xdazz

+0

常に第2の方法を使用するか、このような重要な機能だけを使用しますか? –

関連する問題