2009-10-12 2 views
5

AJAXプログラムの開発中に、JavaScript.codeで文字列I18Nを作成するという設計上の決定に達しました。一部の文字列はJavaScriptでのみ使用されます。例えば。JavaScriptコードで使用される文字列を国際化するにはどうすればよいですか?

$('#submit').click(function() { 
    $(#target).html('Please wait while submitting...').load(someURI); 
} 

「Please wait while submitting ...」という文字列を作成したいと思います。私はそれを行うための最善の方法はよく分かりません。現在、私はちょうどサーバーにI18N-edという文字列を持っていて、ページにjavascript変数にレンダリングしています(私はPHP/wordpressを使用しています)。

<script>strSubmit = <?php _e('Please wait while submitting...'); ?></script> 

次に、JavaScriptでは、私はこの作品varialble

$('#submit').click(function() { 
    $(#target).html(strSubmit).load(someURI); 
} 

を使用しますが、それは乱雑に見えます。これを達成するためのより良い方法はありますか?

+0

あなたはWordpressのは、JavaScriptでのI18nをサポートすることを計画している方法についての詳細ここで読むことができます。https://make.wordpress.org/core/2016/10/10/javascript-internationalization/ – Spone

答えて

2

実際の文字列で

+0

ローカリゼーションが必要なすべての文字列に対してHTTPリクエストを生成することをお勧めしますか? – ep3static

0

元のスクリプト自体にテキストを生成することができます。あなたもジャバスクリプト

script.phpが、これは透過的にJavaScriptコードで _e(something)を置き換えます

function _repl($x) { return '"' . _e($x[1]) . '"'; } 

    $js = file_get_contents($_GET['file']); 
    $js = preg_replace_callback('~_e\("(.+?)"\)~', '_repl', $js); 
    echo $js; 

のようなものである

<script src="script.php?file=blah.js"> 

のためのPHP "プリプロセッサ" を使用してこれを自動化することができ

$('#submit').click(function() { 
    $(#target).html('<?php _e('Please wait while submitting...'); ?>').load(someURI); 
} 
+0

PHPでスクリプト自体を生成してから、言語タグを生成するような感じです – abimelex

0

あなたはRESTアプリの種類を作成することができますあなたがサービスから文書負荷にjavascriptの文字列の要素を埋めるだろうlication、:

$(function(){ 
    var handleResponse = function.....; // fill your string elements from response 
    var lang = "fr"; // language of localized document 

    $.ajax(
     type: "GET", 
     url: "/i18n.php?lang=" + lang + "&names=someName+someName1+someName2", 
     success: handleResponse 
    ); 
}); 
10

あなたはJSONオブジェクトに、サーバー側L10Nの文字列を変換するためにJSONを使用する必要があります。

// In the <head> tag : 
<script type="text/javascript" src="locales.php"></script> 

と、このlocales.php中:

$のL10Nはこのように、すべてのロケールを含む配列です
var l10n = <?php echo json_encode($l10n); ?>; 

$l10n = array(
    'Please wait while submitting...' => 'Veuillez patienter durant le traitement...', 
    'bah' => 'bih' 
); 

あなたは今、JSでこのようなこれらの文字列を使用することができます。

function $T(s){ 
    return l10n[s] || s; 
} 

alert($T('Please wait while submitting...')); 
+0

これは私たちのやり方と非常によく似ています:) – kangax

+0

この方法では、ほんの僅かでも使用されても、すべてのI18N文字列がダウンロードされます。 –

+2

はい、ただし、ファイルはブラウザによってキャッシュされるため、一度だけダウンロードされます。 –

関連する問題