Geeks With Blogs
Thanigainathan Siranjeevi Sharing my learning

I was working with one of the web application localization. I was searching with couple of translator's available with the web. The most popular of them are

1. Google Translation Service

2. Bing Translator Service

I tried using the Google API for the web and it was pretty good. Then in recent times I came across Bing translator and tools link in them gave me the way to implement the Bing API. Bing is making a revolution in the search engines and so I liked to use that here.

Following URL's are referred for this.

  1. http://www.bing.com/developers/appids.aspx
  2. http://msdn.microsoft.com/en-us/library/dd576292.aspx
  3. http://msdn.microsoft.com/en-us/library/dd877917.aspx
  4.  

Application can be downloaded from here.

Bing API:

Bing API is one of the new and cool features from Microsoft. We can use those API's for implementing the customization of search in our Application. There are three kinds of services available for us to implement.

  1. AJAX Interface
  2. HTTP
  3. SOAP

We can use the Ajax interface for our web applications. For Silverlight application it will not be so best to use them. Instead we can use the SOAP reference which will be pretty much easy. I will explain those steps below.

Create a new "Silverlight Business Application" from the templates available or a Normal application if you don't want any prebuilt customizations.

The next step is the SOAP service reference. The SOAP API path for Bing is as follows.

http://api.microsofttranslator.com/V1/SOAP.svc

Just refer this in the silverlight Application and not in the test web application which comes with the Silverlight ptoject.

Adding this creates all the proxy files needed to work with. The next thing is the Application key. This we can get free from the Bing developer website which is given below. One needs to have a Hotmail ID to get this done.

http://www.bing.com/developers/appids.aspx

Through this link we have to create an AppId which we will be using all around the SOAP calls as this is used to give sandboxing security. Since we have taken the Silverlight Navigation Application we will use the HomePage.Xaml to give all the updates and testing. I will explain the cod below.

 

TranslatorService.LanguageServiceClient ls=new LanguageServiceClient();// Creating Bing SOAP Ref object

string AppId = "8ABC484831F80ABC46C07CBFF2C34FF7884A4168";// This AppId is created for my name

System.Collections.ObjectModel.ObservableCollection<string> results;

System.Collections.ObjectModel.ObservableCollection<string> langcodes;

 

This code block has to be declared at the page level .LanguageServiceClient is the Class which has all the methods needed to do the translation. Hence we will create instance at the page level and use that wherever needed. The ApplicationId will be used in all the calls. We can configure this at the configuration level. For now I have given this at the Page level. The result groups that are returned from the SOAP calls are in the form of ObservableCollection.

The XAML structure I very simple for now. We have source language and destination language which we can populate with the GeLangaugeNames method from SOAP calls. The textboxes are used to display source text and destination text.

<StackPanel Style="{StaticResource ContentTextPanelStyle}">

<controls:Label Content="Language Source"></controls:Label>

<ComboBox x:Name="src"></ComboBox>

<controls:Label Content="Destination"></controls:Label>

<ComboBox x:Name="dest"></ComboBox>

</StackPanel>

<StackPanel Style="{StaticResource ContentTextPanelStyle}">

<TextBlock>Text to translate</TextBlock>

<TextBox x:Name="srcTxt" Width="100"></TextBox>

<TextBox x:Name="destTxt" Width="100"></TextBox>

<Button x:Name="cmdSubmit" Click="cmdSubmit_Click" Width="50" Content="Submit"></Button>

</StackPanel>

 

The silverlight calls the webservices in Asynchronous Modes only. Hence we need to handle the events to fetch the values. We have to get the results inside those event definitions. Following are the delegate for event's which we can give in the Page load event. Also we have to call the dropdown load events to load the languages.

//Event Handlers

ls.TranslateCompleted +=new EventHandler<TranslateCompletedEventArgs>(ls_TranslateCompleted);

ls.GetLanguageNamesCompleted +=new EventHandler<GetLanguageNamesCompletedEventArgs>(ls_GetLanguageNamesCompleted);

ls.GetLanguagesCompleted +=new EventHandler<GetLanguagesCompletedEventArgs>(ls_GetLanguagesCompleted);

//For filling the dropdown's and Language codes

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

ls.GetLanguagesAsync(AppId);

 

//Get the translated text

protected void ls_TranslateCompleted(Object sender,TranslateCompletedEventArgs e){

if(e.Error == null){

destTxt.Text = e.Result;

}

}

 

//Get Languages

protected void ls_GetLanguagesCompleted(object sender, GetLanguagesCompletedEventArgs e) {

if (e.Error == null) {

langcodes = e.Result;

}

}

 

//Fill the dropdown's

protected void ls_GetLanguageNamesCompleted(Object sender, GetLanguageNamesCompletedEventArgs e)

{

if (e.Error == null)

{

results = e.Result;

this.src.ItemsSource = results;

this.dest.ItemsSource = results;

}

}

 

private void PerformTranslation() {

if (src.SelectedItem != null && dest.SelectedItem != null)

{

ls.TranslateAsync(AppId, srcTxt.Text, (langcodes[src.SelectedIndex].ToString()), (langcodes[dest.SelectedIndex].ToString()));

}

}

//Translate on button click

private void cmdSubmit_Click(object sender, RoutedEventArgs e)

{

PerformTranslation();

}

 

The final output will be like as follows.

Application can be downloaded from here.

Conclusion:

The translation so far tried is working fine. The Google service is providing more languages that this. In few months Microsoft will release those language features also. We can expect that. There is one more feature called Transliteration available in Google service. I Bing also give that then it will be so nice. Readers can also refer to how the Ajax and HTTP are used. The same code may also work for web application other than Asynchronous mode which is for Silverlight.

Posted on Friday, June 19, 2009 2:08 PM | Back to top


Comments on this post: Silverlight 3 with Bing Translator Services

# re: Silverlight 3 with Bing Translator Services
Requesting Gravatar...
Silverlight does not have built-in support for RTL languages like Arabic, Hebrew, Farsi, and Urdu. This is why in the screenshot shown for Arabic, the text is not displayed correctly. You can use the SilverlightRTL open source library to add support for Arabic. The library is available at http://silverlightRTL.codeplex.com, and you can find more information about it at my blog http://www,silverlightrecipes.com
Left by Yasser Makram on Jun 23, 2009 10:06 AM

# re: Silverlight 3 with Bing Translator Services
Requesting Gravatar...
Hi Sir,

Thanks for the reply. I thought it was displaying correctly. Anyways thanks for pointing that. It will be of great help to us .

Thanks,
Thani
Left by Thanigainathan Siranjeevi on Jun 23, 2009 11:08 AM

Your comment:
 (will show your gravatar)


Copyright © thanigai | Powered by: GeeksWithBlogs.net