2009-10-12 7 views
5

Lors du développement du programme AJAX, j'ai rencontré la décision de conception de faire la chaîne I18N dans JavaScript.code. Certaines chaînes sont uniquement utilisées par JavaScript. Par exemple.Comment internationaliser la chaîne utilisée dans le code javascript?

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

Je voudrais I18N la chaîne 'Please wait while submit ...'. Je ne suis pas sûr de la meilleure façon de le faire. Actuellement, j'ai juste la chaîne I18N-ed dans le serveur et rendue dans une variable javascript dans la page (j'utilise PHP/wordpress).

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

Puis, en javascript, je viens d'utiliser le Varialble

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

Cela fonctionne, mais il semble en désordre. Y a-t-il un meilleur moyen d'y parvenir?

+0

Vous pouvez en lire plus ici sur la façon dont Wordpress envisage de soutenir I18n en javascript: https://make.wordpress.org/core/2016/10/10/javascript-internationalization/ – Spone

Répondre

2

vous pouvez également automatiser cela en utilisant un php "préprocesseur" javascript pour

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

où script.php est quelque chose comme

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

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

cela va remplacer la transparence dans le code javascript _e(something) avec des chaînes réelles

+0

Suggérez-vous de générer une requête HTTP pour chaque chaîne nécessitant une localisation? – ep3static

0

Vous pouvez générer le texte dans le script d'origine lui-même.

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

cela ressemble plus à générer le script lui-même en php qu'à générer la balise de langue – abimelex

0

vous pouvez créer une sorte d'application REST lication, où vous remplissez les éléments de chaînes javascript sur le document charge d'un service:

$(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

Vous devez utiliser JSON pour convertir les chaînes l10n côté serveur à un objet JSON:

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

et ce en locales.php:

var l10n = <?php echo json_encode($l10n); ?>; 

où l10n $ est un tableau qui contient tous les lieux, comme celui-ci:

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

Vous pouvez maintenant utiliser ces chaînes comme celui-ci dans JS:

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

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

Oui. Ceci est très similaire à la façon dont nous le faisons aussi :) – kangax

+0

Dans cette approche, toutes les chaînes I18N sont téléchargées même si seulement quelques-unes sont utilisées. –

+2

Oui, mais les fichiers sont mis en cache par le navigateur, ils ne sont donc téléchargés qu'une seule fois. –

Questions connexes