Click here to Skip to main content
15,880,972 members
Articles / Desktop Programming / WPF

WPF Language Translator

Rate me:
Please Sign up or sign in to vote.
4.92/5 (34 votes)
4 Jan 2012CPOL3 min read 102K   12K   90   40
A WPF application that translates text using the Bing Translation API.

Screenshot_1.png

Introduction

In this article I will describe how to go about using the Bing Translation API to develop a WPF application that provides text translation functionality.

Bing Translation API

The Bing Translation API is a service that provides instant text translation, language detection, collaborative translation[^] functionality, and text-to-speech in multiple languages. The API is currently used by some high profile websites like Facebook and eBay.

The Bing translation service is offered in various usage volume levels. High-volume usage of the service is offered at a price while it is free for low-volume usage and hobbyist use.

NB: While use of the Bing Translation API is free for low-volume usage, this is not a future guarantee. Item 14 in the Bing Web Service API Terms of Use states in part, "... We (Microsoft) may change (including by removing features or charging fees for features previously provided free), update, or enhance (collectively, "modify") the services at any time... ".

Using the Bing Translation API

In order to make use of the Translation API, you need to acquire a Bing AppID, which is free. To get a Bing AppID, go here[^], sign in with your Windows Live ID, fill out and save the application form to generate an AppID, and enable the ID.

The URL that you'll use to access the translation service should be in the following form:

http://api.microsofttranslator.com/v2/Http.svc/Translate?Parameters

The URL has four parameters which must be specified:

  • appId: The Bing AppID for your application
  • text: The text to be translated
  • from: The language to translate from, in the form of an ISO 639-1 Language Code
  • to: The language to translate to, in the form of an ISO 639-1 Language Code

The eventual URL should look something like the following:

http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=1A2345B6789C2345B6789&text=Translate Me&from=en&to=es

Supported Languages

The following table shows the languages currently (as of the time of writing) supported by the Translator API and their ISO 639-1 Language Codes:

Language Code
Arabic ar
Czech cs
Danish da
German de
English en
Estonian et
Finnish fi
Dutch nl
Greek el
Hebrew he
Haitian Creole ht
Hindi hi
Hungarian hu
Indonesian id
Italian it
Japanese ja
Korean ko
Lithuanian lt
Latvian lv
Norwegian no
Polish pl
Portuguese pt
Romanian ro
Spanish es
Russian ru
Slovak sk
Slovene sl
Swedish sv
Thai th
Turkish tr
Ukranian uk
Vietnamese vi
Simplified Chinese zh-CHS
Traditional Chinese zh-CHT

WPF Language Translator

Using the translator application is a simple affair. Just run the app, enter the text you want to translate, specify the languages, and click on the Translate button to display the translated text.

Screenshot_2.png

How it Works

The GetTranslatedText() method in class Translator makes a call to the Bing Translator service and returns a string containing the translated text.

VB.NET

VB
''' <summary>
''' Get translated text from Bing Translator service.
''' </summary>
''' <param name="textToTranslate">Text to translate.</param>
''' <param name="fromLang">Language to translate from.</param>
''' <param name="toLang">Language to translate to.</param>
''' <returns>Translated text</returns>
Public Function GetTranslatedText(ByVal textToTranslate As String, ByVal fromLang As String, _
                               ByVal toLang As String) As String
    Dim translation As String

    ' Translate only if specified languages are different.
    If (fromLang <> toLang) Then
        Dim uri As String = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=" & _
                        appID & "&text=" & textToTranslate & "&from=" & fromLang & "&to=" & toLang

        Dim request As HttpWebRequest = CType(WebRequest.Create(uri), HttpWebRequest)

        Try
            Using response As WebResponse = request.GetResponse
                Dim strm As Stream = response.GetResponseStream
                Using sr As New StreamReader(strm)
                    translation = sr.ReadToEnd
                End Using
            End Using
        Catch ex As WebException
            MessageBox.Show("Ensure that you are connected to the internet.", _
                            "Translator", MessageBoxButton.OK, MessageBoxImage.Stop)
            Exit Function
        End Try
    Else
        MessageBox.Show("Will not translate to the same language.", "Translator", _
                        MessageBoxButton.OK, MessageBoxImage.Exclamation)
        Exit Function
    End If

    ' Parse string into an XElement and get the XElement Value
    ' which is returned as the translated text.
    Return (XElement.Parse(translation).Value)
End Function

C#

C#
/// <summary>
/// Get translated text from Bing Translator service.
/// </summary>
/// <param name="textToTranslate">Text to translate.</param>
/// <param name="fromLang">Language to translate from.</param>
/// <param name="toLang">Language to translate to.</param>
/// <returns>Translated text.</returns>
public string GetTranslatedText(string textToTranslate, string fromLang, string toLang)
{
    string translation;

    if (fromLang != toLang)
    {
        string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=" +
                    appID + "&text=" + textToTranslate + "&from=" + 
                    fromLang + "&to=" + toLang;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

        try
        {
            WebResponse response = request.GetResponse();
            Stream strm = response.GetResponseStream();
            StreamReader sr = new StreamReader(strm);
            translation = sr.ReadToEnd();

            response.Close();
            sr.Close();
        }
        catch (WebException)
        {
            MessageBox.Show("Ensure that you are connected to the internet.",
                        "Translator", MessageBoxButton.OK, MessageBoxImage.Stop);
            return (string.Empty);
        }
    }
    else
    {
        MessageBox.Show("Will not translate to the same language.", 
                        "Translator", MessageBoxButton.OK, 
                        MessageBoxImage.Exclamation);
        return (string.Empty);
    }

    // Parse string into an XElement and get the XElement Value
    // which is returned as the translated text.
    return (XElement.Parse(translation).Value);
}

After setting the value of the string variable, translation, we will end up with an XML string that looks something like the following:

XML
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Translated Text</string>

I then use the XElement.Parse() method to parse the XML string into an XElement object and return the translated text, using the XElement Value property.

NB: You will first need to set the value of the appID field in the class Translator before running the project available from the downloadable source.

VB.NET

VB
' Specify your Bing AppId
Private appID As String = ""

C#

C#
// Specify your Bing appId
private string appID = "";

The Translator class also contains a property that returns a List(Of Language) / List<Language> object that is used to set the ItemsSource property of the language combo boxes.

VB.NET

VB
''' <summary>
''' Returns a List(Of Language)
''' </summary>    
Public ReadOnly Property LanguageList() As List(Of Language)
    Get
        Return (langList.OrderBy(Function(l) l.lang).ToList)
    End Get
End Property

C#

C#
/// <summary>
/// Returns a List<Language>
/// </summary>
public List<language> LanguageList
{
    get
    {
        return (langList.OrderBy(l => l.lang).ToList());
    }
}

The class Language contains two fields and overrides ToString().

VB.NET

VB
Public Class Language
    Public lang As String
    Public langCode As String

    Public Overrides Function ToString() As String
        Return (lang)
    End Function
End Class

C#

C#
class Language
{
    public string lang;
    public string langCode;

    public override string ToString()
    {
        return (lang);
    }
}

The List(Of Language) / List<Language> object in the class Translator is populated by the PopulateLanguageList() method that is called by the class' constructor.

VB.NET

VB
Private Sub PopulateLanguageList()
    langList.Add(New Language With {.lang = "Arabic", .langCode = "ar"})
    langList.Add(New Language With {.lang = "Czech", .langCode = "cs"})
    langList.Add(New Language With {.lang = "Danish", .langCode = "da"})
    langList.Add(New Language With {.lang = "German", .langCode = "de"})        
    ...
End Sub

C#

C#
private void PopulateLanguageList()
{
    langList.Add(new Language {lang = "Arabic", langCode = "ar"});
    langList.Add(new Language {lang = "Czech", langCode = "cs"});
    langList.Add(new Language {lang = "Danish", langCode = "da"});
    langList.Add(new Language {lang = "German", langCode = "de"});
    ...
}

I use this approach to make it easier to get the ISO Language Codes based on the languages specified in the combo boxes.

VB.NET

VB
fromLang = CType(FromLanguageCmbBox.SelectedValue, Language).langCode
toLang = CType(ToLanguageCmbBox.SelectedValue, Language).langCode

C#

C#
fromLang = ((Language)FromLanguageCmbBox.SelectedValue).langCode;
toLang = ((Language)ToLanguageCmbBox.SelectedValue).langCode;

Conclusion

That's it, I hope that you have picked up something useful from this article.

History

  • 2nd Jan, 2012: Initial post.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Kenya Kenya
Experienced C# software developer with a passion for WPF.

Awards,
  • CodeProject MVP 2013
  • CodeProject MVP 2012
  • CodeProject MVP 2021

Comments and Discussions

 
Questioncode for teso language Pin
Member 137090515-Mar-18 0:10
Member 137090515-Mar-18 0:10 
Questionfind solution for my problem Pin
Member 1027248014-Sep-13 20:45
Member 1027248014-Sep-13 20:45 
Questionfind solution for my problem Pin
Member 1027248014-Sep-13 20:41
Member 1027248014-Sep-13 20:41 
AnswerRe: find solution for my problem Pin
Meshack Musundi15-Sep-13 5:46
professionalMeshack Musundi15-Sep-13 5:46 
QuestionApp ID? Pin
Caiser Mahmood13-Sep-13 23:50
Caiser Mahmood13-Sep-13 23:50 
AnswerRe: App ID? Pin
Meshack Musundi14-Sep-13 4:40
professionalMeshack Musundi14-Sep-13 4:40 
SuggestionAPI change, project should be updated. Pin
Victor Rene28-Jun-13 23:47
professionalVictor Rene28-Jun-13 23:47 
GeneralRe: API change, project should be updated. Pin
Meshack Musundi30-Jun-13 7:29
professionalMeshack Musundi30-Jun-13 7:29 
GeneralRe: API change, project should be updated. Pin
Victor Rene30-Jun-13 7:46
professionalVictor Rene30-Jun-13 7:46 
GeneralRe: API change, project should be updated. Pin
Caiser Mahmood14-Sep-13 7:56
Caiser Mahmood14-Sep-13 7:56 
GeneralMy vote of 5 Pin
leiyangge26-Jun-13 19:53
leiyangge26-Jun-13 19:53 
GeneralRe: My vote of 5 Pin
Meshack Musundi26-Jun-13 23:26
professionalMeshack Musundi26-Jun-13 23:26 
Questionhow can i get permanent solution for "Ensure that you are connected to the internet." problem Pin
ashid das1120-Jun-13 1:50
ashid das1120-Jun-13 1:50 
AnswerRe: how can i get permanent solution for "Ensure that you are connected to the internet." problem Pin
Meshack Musundi20-Jun-13 8:28
professionalMeshack Musundi20-Jun-13 8:28 
QuestionAwesome... Pin
Jαved14-Feb-13 20:51
professionalJαved14-Feb-13 20:51 
GeneralRe: Awesome... Pin
Meshack Musundi17-Feb-13 7:01
professionalMeshack Musundi17-Feb-13 7:01 
QuestionApp ID Problem Pin
Satish Kumar Mishra30-Nov-12 19:28
Satish Kumar Mishra30-Nov-12 19:28 
Error Not connect internet.. Whats the meaning of AppID..
Plz Help...

modified 1-Dec-12 1:42am.

AnswerRe: App ID Problem Pin
Meshack Musundi1-Dec-12 19:53
professionalMeshack Musundi1-Dec-12 19:53 
QuestionMy Vote of 5 Pin
AlirezaDehqani31-Oct-12 0:10
AlirezaDehqani31-Oct-12 0:10 
GeneralRe: My Vote of 5 Pin
Meshack Musundi31-Oct-12 6:51
professionalMeshack Musundi31-Oct-12 6:51 
QuestionappID problem Pin
mcjj2314-Sep-12 19:57
mcjj2314-Sep-12 19:57 
Generalhlep me Pin
kamran598-Sep-12 10:46
kamran598-Sep-12 10:46 
GeneralRe: hlep me Pin
mcjj2313-Sep-12 21:34
mcjj2313-Sep-12 21:34 
GeneralRe: hlep me Pin
Meshack Musundi13-Sep-12 23:46
professionalMeshack Musundi13-Sep-12 23:46 
GeneralMy vote of 5 Pin
@k@ ?28-Feb-12 4:08
professional@k@ ?28-Feb-12 4:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.