Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Utilizzare le Google Translator API con Java

Utilizzo le API di Google per le traduzioni dalle nostre pagine Web
Utilizzo le API di Google per le traduzioni dalle nostre pagine Web
Link copiato negli appunti

In questo articolo, presentiamo una libreria java molto utile, da utilizzare nelle nostre applicazioni Java, sia Web, sia Desktop, per fornire una traduzione di qualsiasi testo. Grazie alle Google Translate API, possiamo interfacciarci al traduttore di Google, che, anche se non sempre preciso, è molto semplice da usare.

Possiamo scaricare la libreria dal sito ufficiale. Al momento l'ultima versione sviluppata è la 0.6.

Naturalmente Google ha impostato delle limitazioni sull'utilizzo del servizio, quindi occorre evitare di sovraccaricare il server di richieste, pena il "ban" (l'esclusione) dell'indirizzo IP.

L'esempio che esaminiamo, è costituito da una semplice pagina JSP, nella quale l'utente potrà impostare la lingua di origine, il testo da tradurre e, naturalmente, la lingua in cui il testo deve essere tradotto, e da una servlet che richiamerà la libreria per tradurre il testo.

<%@page import="com.google.api.translate.Language"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Google Translator API</title></head>
<body>
<%
  StringBuffer lingueOption = new StringBuffer();
  Language[] lingueDisponibili = Language.values();
  
  for (int i = 0; i < lingueDisponibili.length; i++)
    lingueOption.append("<option value=""
                        + lingueDisponibili[i].name() + "">"
                        + lingueDisponibili[i].name() + "</option>");
%>

<form action="translator" method="post">

<table>
<tr>
  <td>Lingua origine</td>
  <td>
    <select name="linguaIn">
    <option>[Seleziona]</option>
    <%=lingueOption%>
    </select>
  </td>
</tr>
<tr>
  <td>Lingua destinazione</td>
  <td>
    <select name="linguaOut">
      <option>[Seleziona]</option>
      <%=lingueOption%>
    </select>
  </td>
</tr>
<tr>
  <td colspan="2">
    <textarea rows="10" cols="150" name="testo"></textarea>
  </td>
</tr>
<tr>
  <td colspan="2">
    <input type="submit" value="Traduci" />
  </td>
</tr>
</table>

</form>

</body>
</html>

Utilizzando il metodo statico values() della classe com.google.api.translate.Language, otteniamo l'elenco di tutte le lingue disponibili, con il quale prepopoliamo i menù a tendina della maschera.

package it.html.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

public class TranslatorServlet extends HttpServlet
{
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  {
    String linguaIn = req.getParameter("linguaIn");
    String linguaOut = req.getParameter("linguaOut");
    String testo = req.getParameter("testo");
    
    try
    {
      Language in = Language.valueOf(linguaIn);
      Language out = Language.valueOf(linguaOut);
      String translatedText = Translate.translate(testo, in, out);
      req.setAttribute("testoTradotto", translatedText);
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
      req.setAttribute("testoTradotto", "Impossibile tradurre il testo");
    }
    
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/traduzione.jsp");
    rd.forward(req,resp);
  }
}

Nella Servlet, acquisiamo i parametri impostati dall'utente nella maschera precedente, e mediante il metodo statico valueOf(String) della classe com.google.api.translate.Language, otteniamo le istanze della classe Language, rispettivamente della lingua di origine e della lingua di destinazione.

Tali instanze vanno passate, insieme al testo da tradurre, al metodo translate(String, Language, Language) della classe omonima com.google.api.translate.Translate. La classe ci restituirà il testo tradotto.

Infine passiamo il risultato alla pagina traduzione.jsp dove stamperemo il testo tradotto o l'eventuale messaggio di errore.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Google Translator API</title></head>
<body>

<h2>Testo tradotto</h2>

<div>
  <%= request.getAttribute("testoTradotto") != null ? request.getAttribute("testoTradotto") : "" %>
</div>
<br />
<a href="index.jsp">Torna indietro</a>

</body>
</html>

Naturalmente per testare l'applicazione è necessario avere una connessione internet attiva. In caso contrario la libreria non riuscirà a raggiungere il sevizio google e genererà la seguente eccezione:

java.lang.Exception: [google-api-translate-java] Error retrieving translation.
	at com.google.api.translate.Translate.retrieveTranslation(Translate.java:104)
	at com.google.api.translate.Translate.translate(Translate.java:71)
	…..
Caused by: java.net.NoRouteToHostException: No route to host: connect
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.google.api.translate.Translate.retrieveTranslation(Translate.java:98)
	... 

Ti consigliamo anche