tkd1984
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention10 mars 2009
-
9 mars 2009 à 16:12
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 2015
-
10 mars 2009 à 16:38
bonjour
j'ai entrain de realiser une application desktop sous c#,qui traduire n'import quelle texte entrer avec l'aide de l'api google,voici le code :
"id=result_box"
).ToString()); result = result.Substring(result.IndexOf(
"id=result_box"
) + 20, result.IndexOf(
"id=result_box"
) + 500);
result = result.Substring(0, result.IndexOf(
"
));
return
result;}
mais lorsque j'aexecute le programme ,avec le texte entrer par exemple "salut" our le traduire en anglais,j'ai obtenus une exeption au niveau de ligne :
" result = result.Substring(result.IndexOf("id=result_box") + 20, result.IndexOf(
"id=result_box") + 500); "
cette eception est :
ArgumentOutOfRangeException was unhandled
Index and length must refer to a location within the string.
Parameter name: length
s'il y a une erreur dans le code ,ou une chose qui manque n'hésiter pas ,
merci d'avance
tkd1984
Messages postés12Date d'inscriptionlundi 15 janvier 2007StatutMembreDernière intervention10 mars 2009 10 mars 2009 à 14:59
bonjour
merci pour votre réponse.
C'est une méthode un-officiel pour utiliser l'api google de traduction,pour vos remarques :
1- le nombre 500 c'est le nombre maximale a traduire que donne google(selon quelque tuto!!).
2- pour la limite ,c'est pas grave pars qu'il y le code html ,si tu coupe toute ,tu auras votre mots traduisés en plus le reste de code html.
donc j'ai modifier mon code,et j'ai réussis a traduire sans faute.voici le code :
public static string TranslateText(string input,string languagePair)
{
string url = String.Format("http://www.google.com/translate_t?hl=en&ie=UTF8&text={0}&langpair={1}", input, languagePair);
WebClient webClient = new WebClient();
webClient.Encoding = System.Text.Encoding.UTF8;
string result = webClient.DownloadString(url);
result = result.Substring(result.IndexOf("id=result_box") + 24);
result = result.Substring(0, result.IndexOf("
"));
result = MakeHTMLValid(result);
return result;
}
public static string MakeHTMLValid(string aString)
{
string result = aString;
// Replace Entities
result = result.Replace("Ö", "Ö");
result = result.Replace("ö", "ö");
result = result.Replace("Ä", "Ä");
result = result.Replace("ä", "ä");
result = result.Replace("Ü", "Ü");
result = result.Replace("ü", "ü");
result = result.Replace("ß", "ß");
result = result.Replace("€", "€");
return result;
}
pour la deusieme methode ,c'est facultatif.merci bien
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 10 mars 2009 à 10:53
Salut
avec ta ligne qui bug, tu lui demande de prendre une partie du string, à partir de 20 caractères au delà de "id=result_box" pour une longueur égale à la position de "id=result_box" + 500.
Je ne connais pas l'api google donc je ne sais pas à quoi ressemble "result", mais selon moi tu as 2 erreurs dans ton 2ème argument :
- Ton deuxième argument ne désigne pas l'indice de fin du substring, mais la longueur (donc utiliser IndexOf("id=result_box") me semble une erreur)
- Les limites que tu indique dans ton substring (1er et 2eme argument) ne doivent pas dépasser du string. Or "salut" ne se traduit pas en 500 caractères, donc tu me sembles aller trop loin dans la chaine => C'est ce qui génère l'exception
Comme je le disais, je ne connais pas l'API Google, mais je pense que ton code devrait plutôt ressembler à ça :
result = result.Substring(result.IndexOf("id=result_box") + 20);
Comme ça, ça ira de 20 caractères après id=result_box jusqu'à la fin
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 10 mars 2009 à 16:38
"pour la limite ,c'est pas grave pars qu'il y le code html ,si tu coupe
toute ,tu auras votre mots traduisés en plus le reste de code html."
C'était justement ton problème. Tu essayais de lire plus de caractères qu'il n'y en avait dans la chaine. Donc immanquablement => OutOfRangeException.
Ce n'est pas parce que Google accepte 500 caractères que le retour fera exactement 500 caractères. Non seulement parce que le texte de base peut faire moins de 500 caractères (je crois que c'est le cas pour "salut" :p), mais aussi parce que quand tu traduits un texte, il ne fait pas la même taille que l'original.