Voy a mostrar como podemos utilizar la API de Bing, para integrar un servicio de traducción dentro de nuestra aplicación Silverlight.

Para empezar debemos obtener un AppID que nos va a permitir utilizar las API de Bing, para ello debemos ir aquí, autenticarnos con nuestro Live ID y obtener el AppID.

Para acceder a estos servicios tenemos tres maneras

  • Interfaz Ajax
  • HTTP
  • SOAP

Para nuestro ejemplo vamos a utilizar SOAP para consumir los servicios.

Primero creamos desde Visual Studio, una aplicación Silverlight.

Segundo agregamos la referencia al servicio, la url para acceder vía SOAP es http://api.microsofttranslator.com/V1/SOAP.svc.1 

Vamos a crear entonces los controles necesarios en nuestro XAML.

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">StackPanel</span> <span style="color: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">=&quot;Center&quot;</span><span style="color: #0000ff">&gt;</span>

1
&#160;

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>Idioma Origen<span style="color: #0000ff">&lt;/</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">ComboBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">=&quot;comboOrigen&quot;</span>

1
<span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;250&quot;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">ComboBox</span><span style="color: #0000ff">&gt;</span>

1

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>Texto Origen<span style="color: #0000ff">&lt;/</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">=&quot;textoOrigen&quot;</span>

1
<span style="color: #ff0000">Height</span><span style="color: #0000ff">=&quot;56&quot;</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;250&quot;</span> <span style="color: #ff0000">FontSize</span><span style="color: #0000ff">=&quot;34&quot;</span><span style="color: #0000ff">/&gt;</span>

1
&#160;

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>Idioma Destino<span style="color: #0000ff">&lt;/</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">ComboBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">=&quot;comboDestino&quot;</span>

1
<span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;250&quot;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">ComboBox</span><span style="color: #0000ff">&gt;</span>

1
&#160;

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>Texto Destino<span style="color: #0000ff">&lt;/</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">&gt;</span>

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">=&quot;textoDestino&quot;</span>

1
<span style="color: #ff0000">Height</span><span style="color: #0000ff">=&quot;56&quot;</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;250&quot;</span> <span style="color: #ff0000">FontSize</span><span style="color: #0000ff">=&quot;34&quot;</span><span style="color: #0000ff">/&gt;</span>

1

1
<span style="color: #0000ff">&lt;</span><span style="color: #800000">Button</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">=&quot;botonTraducir&quot;</span>

1
<span style="color: #ff0000">Click</span><span style="color: #0000ff">=&quot;botonTraducir_Click&quot;</span>

1
<span style="color: #ff0000">Content</span><span style="color: #0000ff">=&quot;Traducir&quot;</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;50&quot;</span><span style="color: #0000ff">/&gt;</span>

1
&#160;

1
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">StackPanel</span><span style="color: #0000ff">&gt;</span>

Tenemos un ComboBox para elegir los idiomas y un TextBox para el ingresar el texto que quiero traducir y para mostrar el resultado. Un Button para disparar la traducción.

Agregamos las referencias a las librerías que vamos a necesitar.

1
<span style="color: #0000ff">using</span> BingTranslator.TranslatorService;

1
<span style="color: #0000ff">using</span> System.Collections.ObjectModel;

Crear algunas variables que vamos a utilizar.

1
<span style="color: #008000">// Referencia SOAP a Bing Translator</span>

1
TranslatorService.LanguageServiceClient

1
ls = <span style="color: #0000ff">new</span> LanguageServiceClient();

1
<span style="color: #008000">// AppId para utilizar los servicios de Bing</span>

1
<span style="color: #0000ff">string</span> AppId = <span style="color: #006080">&quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;</span>;

1
<span style="color: #008000">// Collecion de Idiomas</span>

1
ObservableCollection&lt;<span style="color: #0000ff">string</span>&gt; langcodes;

Cómo los métodos que utiliza el servicio son asincrónicos, necesitamos generar los handlers necesarios. Esto lo vamos a realizar desde Load de nuestra aplicación.

1
<span style="color: #008000">// Handlers</span>

1
ls.TranslateCompleted +=

1
<span style="color: #0000ff">new</span> EventHandler&lt;TranslateCompletedEventArgs&gt;

1
(ls_TranslateCompleted);

1
ls.GetLanguageNamesCompleted +=

1
<span style="color: #0000ff">new</span> EventHandler&lt;GetLanguageNamesCompletedEventArgs&gt;

1
(ls_GetLanguageNamesCompleted);

1
ls.GetLanguagesCompleted +=

1
<span style="color: #0000ff">new</span> EventHandler&lt;GetLanguagesCompletedEventArgs&gt;

1
(ls_GetLanguagesCompleted);

Vamos a llenar los combos de los idiomas y a guardar en nuestra colección de idiomas los keys de los mismos, que nos servirá después para saber que idiomas pasar al servicio. Esto también lo ponemos dentro del Load.

1
<span style="color: #008000">// Evento para guardar la lista de idiomas disponibles</span>

1
<span style="color: #008000">// Trae el código del Idioma</span>

1
ls.GetLanguageNamesAsync(AppId, Language.IetfLanguageTag);

1
&#160;

1
<span style="color: #008000">// Evento para llenar los combos de Idiomas</span>

1
<span style="color: #008000">// Trae la descripción del Idioma</span>

1
ls.GetLanguagesAsync(AppId);

Ahora agregamos los handlers que se utilizan para traer los idiomas.

1
<span style="color: #008000">// Guarda la lista de idiomas disponibles</span>

1
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> ls_GetLanguagesCompleted(<span style="color: #0000ff">object</span> sender,

1
GetLanguagesCompletedEventArgs e)

1
{

1
<span style="color: #0000ff">if</span> (e.Error == <span style="color: #0000ff">null</span>)

1
{

1
langcodes = e.Result;

1
}

1
}

1
&#160;

1
<span style="color: #008000">// Llena los combos de Idiomas</span>

1
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> ls_GetLanguageNamesCompleted(Object sender,

1
GetLanguageNamesCompletedEventArgs e)

1
{

1
<span style="color: #0000ff">if</span> (e.Error == <span style="color: #0000ff">null</span>)

1
{

1
comboOrigen.ItemsSource = e.Result;

1
comboDestino.ItemsSource = e.Result;

1
&#160;

1
<span style="color: #008000">// Origen por defecto es Inglés</span>

1
comboOrigen.SelectedIndex =

1
langcodes.IndexOf(<span style="color: #006080">&quot;en&quot;</span>);

1
<span style="color: #008000">// Destino por defecto es Español</span>

1
comboDestino.SelectedIndex =

1
langcodes.IndexOf(<span style="color: #006080">&quot;es&quot;</span>);

1
}

1
}

Vamos a la parte más interesante, donde vamos a traducir el texto. Nosotros vamos a llamar al método que traduce, al ser asincrónico, cuando termine llamará al handler que especificamos en el Load.

1
<span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> botonTraducir_Click(<span style="color: #0000ff">object</span> sender,

1
RoutedEventArgs e)

1
{

1
<span style="color: #0000ff">if</span> (comboOrigen.SelectedItem != <span style="color: #0000ff">null</span> &amp;&amp;

1
comboDestino.SelectedItem != <span style="color: #0000ff">null</span>)

1
{

1
ls.TranslateAsync(AppId, textoOrigen.Text,

1
(langcodes[comboOrigen.SelectedIndex].ToString()),

1
(langcodes[comboDestino.SelectedIndex].ToString()));

1
}

1
}

1
&#160;

1
<span style="color: #008000">// Recibe el texto traducido del Servicio</span>

1
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> ls_TranslateCompleted(Object sender,

1
TranslateCompletedEventArgs e)

1
{

1
<span style="color: #0000ff">if</span> (e.Error == <span style="color: #0000ff">null</span>)

1
{

1
textoDestino.Text = e.Result;

1
}

1
}

Vemos un screen de la aplicación.

2 Pueden descargar el ejemplo aquí.