Windows Phone 7调用必应翻译服务
這講是介紹如何在Windows Phone上調(diào)用必應(yīng)翻譯服務(wù)。想必大家也知道必應(yīng)為我們提供了很多服務(wù),諸如搜索、地圖、翻譯等。前面已經(jīng)介紹了如何在Windows Phone上調(diào)用必應(yīng)的地圖服務(wù),今天調(diào)用必應(yīng)的翻譯服務(wù),在它的服務(wù)中包含36種以上語(yǔ)言,包括簡(jiǎn)體中文、繁體中文等。下面是一個(gè)快照。有興趣的朋友趕快行動(dòng)吧!
效果圖如下
起始界面
?
沒有選擇語(yǔ)言時(shí)彈出提示框
?
沒有輸入數(shù)據(jù)時(shí)彈出提示框
?
翻譯完成后界面
?
好啦!開始吧.
Step 1:創(chuàng)建語(yǔ)言類Language.cs
每種語(yǔ)言都有兩個(gè)屬性,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屬性,來顯示數(shù)據(jù)。
<ScrollViewer><StackPanel Orientation="Vertical">
<TextBlock FontSize="30">源語(yǔ)言:</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">目標(biāo)語(yǔ)言:</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文件中定義三個(gè)List<T>,來保存數(shù)據(jù)。
? private List<string> codes;
??????? private List<string> names;
??????? private List<Language> languages;
?
Step 3:使用Bing SOAP 服務(wù)
? 添加服務(wù)引用,地址為:http://api.microsofttranslator.com/V2/Soap.svc,LanguageServiceClient是一個(gè)Proxy,提供了一些調(diào)用服務(wù)的方法。下面我們定義一個(gè)對(duì)象
private BTS.LanguageServiceClient proxy;
要使用必應(yīng)的翻譯服務(wù)我們首先必須獲取一個(gè)APP_ID,到http://cn.bing.com/developers/createapp.aspx網(wǎng)站,輸入信息來獲取。我注冊(cè)的ID也可以使用,請(qǐng)看下圖。
?
接下來我們注冊(cè)事件?
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事件有一個(gè)GetLanguagesForTranslateCompletedEventArgs類型的參數(shù)。包含一些從服務(wù)中得到的數(shù)據(jù),如Language的Code值。
GetLanguageNamesCompleted事件有一個(gè)GetLanguageNamesCompletedEventArgs類型的參數(shù),包含Language的Name值。
TranslateCompleted事件將我們輸入原語(yǔ)言的數(shù)據(jù)翻譯為目標(biāo)語(yǔ)言的數(shù)據(jù)。
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;
}
?
?現(xiàn)在給ListBox對(duì)象綁定數(shù)據(jù)
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("請(qǐng)先選擇語(yǔ)言","提示",MessageBoxButton.OK);
return;
}
if (this.txtOrign.Text.Trim().Length==0)
{
MessageBox.Show("請(qǐng)先輸入要翻譯的單詞或語(yǔ)句","提示",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">源語(yǔ)言:</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">目標(biāo)語(yǔ)言:</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("請(qǐng)先選擇語(yǔ)言", "提示", MessageBoxButton.OK);
return;
}
if (this.txtOrign.Text.Trim().Length == 0)
{
MessageBox.Show("請(qǐng)先輸入要翻譯的單詞或語(yǔ)句", "提示", 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>
?
?
源碼下載
總結(jié)
以上是生活随笔為你收集整理的Windows Phone 7调用必应翻译服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无论在哪里办公,保持注意力和减少数字干扰
- 下一篇: Windows 命令使用之 ping 命