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.
Vamos a crear entonces los controles necesarios en nuestro XAML.
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">StackPanel</span> <span style="color: #ff0000">HorizontalAlignment</span><span style="color: #0000ff">="Center"</span><span style="color: #0000ff">></span> |
|
1 |
  |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span>Idioma Origen<span style="color: #0000ff"></</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span> |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">ComboBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="comboOrigen"</span> |
|
1 |
<span style="color: #ff0000">Width</span><span style="color: #0000ff">="250"</span><span style="color: #0000ff">></</span><span style="color: #800000">ComboBox</span><span style="color: #0000ff">></span> |
|
1 |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span>Texto Origen<span style="color: #0000ff"></</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span> |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="textoOrigen"</span> |
|
1 |
<span style="color: #ff0000">Height</span><span style="color: #0000ff">="56"</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="250"</span> <span style="color: #ff0000">FontSize</span><span style="color: #0000ff">="34"</span><span style="color: #0000ff">/></span> |
|
1 |
  |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span>Idioma Destino<span style="color: #0000ff"></</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span> |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">ComboBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="comboDestino"</span> |
|
1 |
<span style="color: #ff0000">Width</span><span style="color: #0000ff">="250"</span><span style="color: #0000ff">></</span><span style="color: #800000">ComboBox</span><span style="color: #0000ff">></span> |
|
1 |
  |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span>Texto Destino<span style="color: #0000ff"></</span><span style="color: #800000">TextBlock</span><span style="color: #0000ff">></span> |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">TextBox</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="textoDestino"</span> |
|
1 |
<span style="color: #ff0000">Height</span><span style="color: #0000ff">="56"</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="250"</span> <span style="color: #ff0000">FontSize</span><span style="color: #0000ff">="34"</span><span style="color: #0000ff">/></span> |
|
1 |
|
1 |
<span style="color: #0000ff"><</span><span style="color: #800000">Button</span> <span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="botonTraducir"</span> |
|
1 |
<span style="color: #ff0000">Click</span><span style="color: #0000ff">="botonTraducir_Click"</span> |
|
1 |
<span style="color: #ff0000">Content</span><span style="color: #0000ff">="Traducir"</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">="50"</span><span style="color: #0000ff">/></span> |
|
1 |
  |
|
1 |
<span style="color: #0000ff"></</span><span style="color: #800000">StackPanel</span><span style="color: #0000ff">></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">"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"</span>; |
|
1 |
<span style="color: #008000">// Collecion de Idiomas</span> |
|
1 |
ObservableCollection<<span style="color: #0000ff">string</span>> 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<TranslateCompletedEventArgs> |
|
1 |
(ls_TranslateCompleted); |
|
1 |
ls.GetLanguageNamesCompleted += |
|
1 |
<span style="color: #0000ff">new</span> EventHandler<GetLanguageNamesCompletedEventArgs> |
|
1 |
(ls_GetLanguageNamesCompleted); |
|
1 |
ls.GetLanguagesCompleted += |
|
1 |
<span style="color: #0000ff">new</span> EventHandler<GetLanguagesCompletedEventArgs> |
|
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 |
  |
|
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 |
  |
|
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 |
  |
|
1 |
<span style="color: #008000">// Origen por defecto es Inglés</span> |
|
1 |
comboOrigen.SelectedIndex = |
|
1 |
langcodes.IndexOf(<span style="color: #006080">"en"</span>); |
|
1 |
<span style="color: #008000">// Destino por defecto es Español</span> |
|
1 |
comboDestino.SelectedIndex = |
|
1 |
langcodes.IndexOf(<span style="color: #006080">"es"</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> && |
|
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 |
  |
|
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.
Pueden descargar el ejemplo aquí.



