Windows Phone 7调用必应翻译服务
這講是介紹如何在Windows Phone上調用必應翻譯服務。想必大家也知道必應為我們提供了很多服務,諸如搜索、地圖、翻譯等。前面已經介紹了如何在Windows Phone上調用必應的地圖服務,今天調用必應的翻譯服務,在它的服務中包含36種以上語言,包括簡體中文、繁體中文等。下面是一個快照。有興趣的朋友趕快行動吧!
效果圖如下
起始界面
?
沒有選擇語言時彈出提示框
?
沒有輸入數據時彈出提示框
?
翻譯完成后界面
?
好啦!開始吧.
Step 1:創建語言類Language.cs
每種語言都有兩個屬性,Name,Code。如上倆圖中文的Name是chinese simplified,Code是zh-CHS.
public class Language{
??? public string Code { get; set; }
??? public string Name { get; set; }
}
Step 2:用戶接口
我們定義了一些控件,并綁定Language的Name屬性,來顯示數據。
<ScrollViewer><StackPanel Orientation="Vertical">
<TextBlock FontSize="30">源語言:</TextBlock>
<ListBox x:Name="lbxFrom" Height="160" Margin="0,10,0,10" Width="440" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Name="txtOrign" Text="" FontSize="25" TextWrapping="Wrap" Height="160" HorizontalAlignment="Left" Width="440"/>
<TextBlock FontSize="30">目標語言:</TextBlock>
<ListBox x:Name="lbxTo" Height="160" Margin="0,10,0,10" Width="440" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Name="btnTranslate" Content="翻譯"
Click="btnTranslate_Click" />
<TextBox Name="txtTarget" IsReadOnly="True" FontSize="30" TextWrapping="Wrap" Height="160" HorizontalAlignment="Left" Width="440"/>
</StackPanel>
</ScrollViewer>
</UserControl>
?
在MainPage.cs文件中定義三個List<T>,來保存數據。
? private List<string> codes;
??????? private List<string> names;
??????? private List<Language> languages;
?
Step 3:使用Bing SOAP 服務
? 添加服務引用,地址為:http://api.microsofttranslator.com/V2/Soap.svc,LanguageServiceClient是一個Proxy,提供了一些調用服務的方法。下面我們定義一個對象
private BTS.LanguageServiceClient proxy;
要使用必應的翻譯服務我們首先必須獲取一個APP_ID,到http://cn.bing.com/developers/createapp.aspx網站,輸入信息來獲取。我注冊的ID也可以使用,請看下圖。
?
接下來我們注冊事件?
proxy.GetLanguagesForTranslateCompleted += new EventHandler<BTS.GetLanguagesForTranslateCompletedEventArgs>(proxy_GetLanguagesForTranslateCompleted);
????? proxy.GetLanguageNamesCompleted += new EventHandler<BTS.GetLanguageNamesCompletedEventArgs>(proxy_GetLanguageNamesCompleted);
????? proxy.TranslateCompleted += new EventHandler<BTS.TranslateCompletedEventArgs>(proxy_TranslateCompleted);
其中GetLanguagesForTranslateCompleted事件有一個GetLanguagesForTranslateCompletedEventArgs類型的參數。包含一些從服務中得到的數據,如Language的Code值。
GetLanguageNamesCompleted事件有一個GetLanguageNamesCompletedEventArgs類型的參數,包含Language的Name值。
TranslateCompleted事件將我們輸入原語言的數據翻譯為目標語言的數據。
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e){
proxy.GetLanguagesForTranslateCompleted += new EventHandler<BTS.GetLanguagesForTranslateCompletedEventArgs>(proxy_GetLanguagesForTranslateCompleted);
proxy.GetLanguageNamesCompleted += new EventHandler<BTS.GetLanguageNamesCompletedEventArgs>(proxy_GetLanguageNamesCompleted);
proxy.TranslateCompleted += new EventHandler<BTS.TranslateCompletedEventArgs>(proxy_TranslateCompleted);
proxy.GetLanguagesForTranslateAsync(APP_ID);
}
public void proxy_GetLanguagesForTranslateCompleted(object sender, BTS.GetLanguagesForTranslateCompletedEventArgs e)
{
codes = e.Result.ToList();
proxy.GetLanguageNamesAsync(APP_ID, "en", e.Result);
}
public void proxy_GetLanguageNamesCompleted(object sender, BTS.GetLanguageNamesCompletedEventArgs e)
{
names = e.Result.ToList();
loadLanguages();
}
public void proxy_TranslateCompleted(object sender, BTS.TranslateCompletedEventArgs e)
{
txtTarget.Text = e.Result;
}
?
?現在給ListBox對象綁定數據
private void loadLanguages(){
for (int index = 0; index < codes.Count; index++)
{
languages.Add(new Language
{
Code = codes[index],
Name = names[index]
});
}
lbxFrom.ItemsSource = languages;
lbxTo.ItemsSource = languages;
}
?
?定義Translate()方法來完成翻譯
private void Translate(){
if (lbxFrom.SelectedItem == null || lbxTo.SelectedItem == null)
{
MessageBox.Show("請先選擇語言","提示",MessageBoxButton.OK);
return;
}
if (this.txtOrign.Text.Trim().Length==0)
{
MessageBox.Show("請先輸入要翻譯的單詞或語句","提示",MessageBoxButton.OK);
return;
}
else
{
Language from = lbxFrom.SelectedItem as Language;
Language to = lbxTo.SelectedItem as Language;
proxy.TranslateAsync(APP_ID, txtOrign.Text, from.Code, to.Code);
}
}
}
?
完整MainPage.xaml代碼
<phone:PhoneApplicationPagex:Class="BingTranslatorService.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ScrollViewer>
<StackPanel Orientation="Vertical">
<TextBlock FontSize="30">源語言:</TextBlock>
<ListBox x:Name="lbxFrom" Height="160" Margin="0,10,0,10" Width="440" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Name="txtOrign" Text="" FontSize="25" TextWrapping="Wrap" Height="160" HorizontalAlignment="Left" Width="440"/>
<TextBlock FontSize="30">目標語言:</TextBlock>
<ListBox x:Name="lbxTo" Height="160" Margin="0,10,0,10" Width="440" HorizontalAlignment="Left">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="30"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Name="btnTranslate" Content="翻譯"
Click="btnTranslate_Click" />
<TextBox Name="txtTarget" IsReadOnly="True" FontSize="30" TextWrapping="Wrap" Height="160" HorizontalAlignment="Left" Width="440"/>
</StackPanel>
</ScrollViewer>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
</UserControl>
?
完整MainPage.csl代碼
using System;using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace BingTranslatorService
{
public partial class MainPage : PhoneApplicationPage
{
private List<string> codes;
private List<string> names;
private List<Language> languages;
private BTS.LanguageServiceClient proxy;
//http://cn.bing.com/developers/createapp.aspx
private readonly string APP_ID = "3DAEE5B978BA031557E739EE1E2A68CB1FAD5909";
public MainPage()
{
InitializeComponent();
codes = new List<string>();
names = new List<string>();
languages = new List<Language>();
proxy = new BTS.LanguageServiceClient();
this.Loaded += new RoutedEventHandler(PhoneApplicationPage_Loaded);
}
private void btnTranslate_Click(object sender, RoutedEventArgs e)
{
Translate();
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
proxy.GetLanguagesForTranslateCompleted += new EventHandler<BTS.GetLanguagesForTranslateCompletedEventArgs>(proxy_GetLanguagesForTranslateCompleted);
proxy.GetLanguageNamesCompleted += new EventHandler<BTS.GetLanguageNamesCompletedEventArgs>(proxy_GetLanguageNamesCompleted);
proxy.TranslateCompleted += new EventHandler<BTS.TranslateCompletedEventArgs>(proxy_TranslateCompleted);
proxy.GetLanguagesForTranslateAsync(APP_ID);
}
public void proxy_GetLanguagesForTranslateCompleted(object sender, BTS.GetLanguagesForTranslateCompletedEventArgs e)
{
codes = e.Result.ToList();
proxy.GetLanguageNamesAsync(APP_ID, "en", e.Result);
}
public void proxy_GetLanguageNamesCompleted(object sender, BTS.GetLanguageNamesCompletedEventArgs e)
{
names = e.Result.ToList();
loadLanguages();
}
public void proxy_TranslateCompleted(object sender, BTS.TranslateCompletedEventArgs e)
{
txtTarget.Text = e.Result;
}
private void loadLanguages()
{
for (int index = 0; index < codes.Count; index++)
{
languages.Add(new Language
{
Code = codes[index],
Name = names[index]
});
}
lbxFrom.ItemsSource = languages;
lbxTo.ItemsSource = languages;
}
private void Translate()
{
if (lbxFrom.SelectedItem == null || lbxTo.SelectedItem == null)
{
MessageBox.Show("請先選擇語言", "提示", MessageBoxButton.OK);
return;
}
if (this.txtOrign.Text.Trim().Length == 0)
{
MessageBox.Show("請先輸入要翻譯的單詞或語句", "提示", MessageBoxButton.OK);
return;
}
else
{
Language from = lbxFrom.SelectedItem as Language;
Language to = lbxTo.SelectedItem as Language;
proxy.TranslateAsync(APP_ID, txtOrign.Text, from.Code, to.Code);
}
}
}
}
</UserControl>
?
?
源碼下載
總結
以上是生活随笔為你收集整理的Windows Phone 7调用必应翻译服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无论在哪里办公,保持注意力和减少数字干扰
- 下一篇: [Github项目推荐] 机器学习 Py