2009-12-04 7 views
0

i ont la scenary suivante:Comment faire une itération sur div?

<div class="maindiv"> 
    <div class="msg">some text</div> 
        ... 
    <div class="msg">some other text</div> 
</div> 

Je voudrais prendre le texte de chaque div class 'msg' et de le traduire en utilisant l'API Google.

J'ai fait la fonction JS suivante:

function translateTimeline(){ 

var lang = $('#timelineLenguage').val(); 
var translation; 
    $(".msg").each(
    function(i){ 
       translation=google.language.translate($(this).text(), "", lang, 
       function(result) { 
        if (!result.error) { 

         $(this).text(result.translation); 
        }else{ 
         alert('Cannot translate tweet. Try again later'); 
        } 
       }); 

    }); 
return false; 
}; 

qui ne fonctionne pas ..

Ce fut tout ce que je pouvais faire avec mes compétences limitées JS/jQuery ..

Thx à l'avance pour votre aide et votre temps :)

+1

Comment ça ne marche pas? Est-ce qu'il n'y a pas d'effet? la traduction est-elle fausse? Recevez-vous le message d'erreur dans le bloc else? –

Répondre

1

Je ne l'ai jamais joué avec le google.language APIs, et ce fut un exercice amusant. Fondamentalement, c'est un outil pour traduire les articles .msg dans une autre langue. Je ne suis pas sûr de la fragilité de ce changement si les API changent, mais cela semble plutôt bien fonctionner. Notez que cela ne préserve pas le texte d'origine, et donc si vous faites plusieurs traduit la qualité de la traduction "se dégrade". Jetez un oeil à la façon dont j'ai fait la fonction translateWithGoogle() et je pense que cela va informer votre propre code. Je l'ai rationalisé autant que possible.

<html> 
<head> 
<script type="text/javascript" src="http://www.google.com/jsapi"></script> 
<script type="text/javascript"> 

google.load("jquery", "1.3.2"); 
google.load("language", "1"); 

function translateWithGoogle(context, fromLang, toLang) { 
    google.language.translate($(context).text(), fromLang, toLang, 
     function(result) { 
     if (!result.error) { 
      $(context).text(result.translation); 
     } 
    }); 
} 
function translateTimeline() { 
    var fromLang = $('#currentLang').text(); 
    var toLang = $('#targetLang').val() 
    $('.msg').each(function() { 
     translateWithGoogle(this, fromLang, toLang); 
    }); 
    $('#currentLang').text(toLang); 
} 

$(document).ready(function(){ 
    $('#targetLang').bind('change', function(){ 
     translateTimeline(); 
    }); 
}); 
</script> 
</head> 
<body> 
<div class="maindiv"> 
    <div class="msg">some text</div> 
    <div class="msg">some other text</div> 
    <div class="msg">hello world</div> 
    <div class="msg">my stack has overflowed!</div> 
</div> 
<hr /> 
<span id="currentLang">en</span> 
<select id="targetLang"> 
    <option value="af">Afrikaans</option> 
    <option value="sq">Albanian</option> 
    <option value="ar">Arabic</option> 
    <option value="be">Belarusian</option> 
    <option value="bg">Bulgarian</option> 
    <option value="ca">Catalan</option> 
    <option value="zh-CN">Chinese</option> 
    <option value="hr">Croatian</option> 
    <option value="cs">Czech</option> 
    <option value="da">Danish</option> 
    <option value="nl">Dutch</option> 
    <option value="en">English</option> 
    <option value="et">Estonian</option> 
    <option value="tl">Filipino</option> 
    <option value="fi">Finnish</option> 
    <option value="fr">French</option> 
    <option value="gl">Galician</option> 
    <option value="de">German</option> 
    <option value="el">Greek</option> 
    <option value="iw">Hebrew</option> 
    <option value="hi">Hindi</option> 
    <option value="hu">Hungarian</option> 
    <option value="is">Icelandic</option> 
    <option value="id">Indonesian</option> 
    <option value="ga">Irish</option> 
    <option value="it">Italian</option> 
    <option value="ja">Japanese</option> 
    <option value="ko">Korean</option> 
    <option value="lv">Latvian</option> 
    <option value="lt">Lithuanian</option> 
    <option value="mk">Macedonian</option> 
    <option value="ms">Malay</option> 
    <option value="mt">Maltese</option> 
    <option value="no">Norwegian</option> 
    <option value="fa">Persian</option> 
    <option value="pl">Polish</option> 
    <option value="pt">Portuguese</option> 
    <option value="ro">Romanian</option> 
    <option value="ru">Russian</option> 
    <option value="sr">Serbian</option> 
    <option value="sk">Slovak</option> 
    <option value="sl">Slovenian</option> 
    <option value="es">Spanish</option> 
    <option value="sw">Swahili</option> 
    <option value="sv">Swedish</option> 
    <option value="th">Thai</option> 
    <option value="tr">Turkish</option> 
    <option value="uk">Ukrainian</option> 
    <option value="vi">Vietnamese</option> 
    <option value="cy">Welsh</option> 
    <option value="yi">Yiddish</option> 
</select> 

</body> 
</html> 
+0

travaillé merveilles! Thx beaucoup! :) – mcabral

+0

Comme je l'ai dit, C'était un bon exercice - et je suis heureux d'aider! – artlung

0

MyaBe essayer

$(this).html() 

au lieu de

$(this).text() 
+0

text() est la méthode appropriée ici. Le traducteur google n'est pas intéressé par les tags html. – Magnar

+0

Déjà essayé celui-là, même problème :(merci pour votre contribution :) – mcabral

0

Cela pourrait être parce que vous avez orthographié la mauvaise langue dans la ligne:

lang = $('#timelineLenguage').val(); 

Si ce ne l'est pas, vous devez fournir plus de détails sur ce qui se passe.

+0

Merci pour la réponse. Oui, il y avait une faute de frappe là-bas, mais ce n'était pas ça :( – mcabral

0

Etes-vous sûr que le "ceci" de la ligne suivante pointe vers le bon objet? Ne pointe-t-il pas à la fenêtre?

$(this).text(result.translation); 

Essayez ceci:

function translateTimeline(){ 

    var lang = $('#timelineLenguage').val(); 
    var translation; 
    $(".msg").each(
    function(i){ 
     var me = this; /*CHANGED*/ 
     translation=google.language.translate($(this).text(), "", lang, 
      function(result) { 
       if (!result.error) { 
        $(me).text(result.translation); /*CHANGED*/ 
       }else{ 
        alert('Cannot translate tweet. Try again later'); 
       } 
      } 
     ); 
    }); 
    return false; 
}; 
+0

copier et coller mais pas de chance :( merci pour votre temps :) – mcabral

+0

Désolé, cela n'a pas fonctionné –

Questions connexes