这讲是介绍如何在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:PhoneApplicationPage
x: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调用必应翻译服务相关推荐

  1. Windows恶意软件API调用特征分析

    本文讲的是Windows恶意软件API调用特征分析, 1.背景 目标: 1)找到病毒调用概率高的API 2)找到病毒调用概率不高,但是当调用频次高的时候,是病毒概率高的API. 通常对病毒使用API的 ...

  2. Windows服务程序时钟调用

    1       大概思路 设计服务程序 创建服务 安装必备组件 编写Service1 运行效果 2       设计服务程序 创建服务程序,通过添加System.Timers时钟进行定时向Wecome ...

  3. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  4. Windows下Java调用BAT批处理不弹出cmd窗口

    常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...

  5. java 制作 winrar,windows 上java调用winrar压缩文件为rar 格式

    windows 下java调用winrar压缩文件为rar 格式 windows  下java调用winrar压缩文件为rar 格式 import java.io.BufferedReader; im ...

  6. 调用bing图片html代码,网站背景调用必应Bing每日图片教程附接口

    本次为大家带来的是为网站背景调用必应Bing每日图片教程附接口 微软的必应搜索的每日图片的内容也是非常好看非常美的 小编突发奇想把必应每日更新的图片应用到网站背景 然后就能每天自动换很好看的网站背景了 ...

  7. windows 下java调用winrar压缩文件为rar 格式

    windows  下java调用winrar压缩文件为rar 格式 import java.io.BufferedReader; import java.io.IOException; import ...

  8. Windows编程之调用Matlab

    一.选择matlab: 注意.Matlab的安装需要较长时间,建议本拓展在同学们自己的电脑上运行. Matlab是大多数工科学生必修的科目,是一个口碑极佳的数学计算工具,可以支持立即运算和程序设计两种 ...

  9. windows:QtCreator调用库的方式

    在windows相关系统中,使用QtCreator无法像linux相关系统那样调用静态或动态库,需要修改添加方式才能正确执行程序 接下来需要5分钟阅读时间,来了解windows相关系统中QtCreat ...

  10. vs编写windows服务和调用webservice

    调用timer不能用 System.Windows.Forms.Timer而应该用System.Timers.Timer System.Timers.Timer t = new System.Time ...

最新文章

  1. RecyclerView 刷新的时候出现阴影的处理方法
  2. 开发微信小程序入门前
  3. codeforces808G Anthem of Berland(kmp+自动机+dp)
  4. Android中的跨进程通信方法实例及特点分析(二):ContentProvider
  5. java如何压缩html代码,java 压缩html文件
  6. Universal-imageLoader缓存图片加载
  7. k8s证书配置:为 kubelet 配置证书轮换
  8. 使用Network Recycle Bin启用映射网络驱动器上的回收站
  9. C++ const修饰符的简单介绍
  10. 【数据库】数据库基本概念:数据库管理系统 / 数据库 / 表 / 数据
  11. sql的case when用法
  12. elementui 弹窗 显示详细信息_ElementUI中el-table双击单元格事件并获取指定列的值和弹窗显示详细信息...
  13. JAVA 简单综合题目 小型公司职工对象
  14. MATLAB基础数组操作及循环语句语法简介
  15. 全网首发:字体引擎中字符图像的插槽
  16. 部署VC2008应用程序
  17. HPE server 如何利用SPP包升级BIOS方法合集
  18. 各自然带代表植被_十种常见自然带所对应的植被
  19. tar:time stamp in the future
  20. 慕测安居客功能测试答案

热门文章

  1. 华为模拟eNSP器交换机简单开具以及基础命令
  2. java mybatis cms_java cms系统 springmvc mybatis
  3. python脚本——Excel处理
  4. vibe的matlab实现,Matlab調用VIBE算法
  5. RS232与RS485协议原理及应用
  6. FGUI弧形UI实现
  7. 计算机辅助设计学什么,计算机辅助设计课程教学大纲
  8. 素材资源解析系统源码 代下程序 第三方平台下载站程序千图网千库网等素材网站下载网站
  9. 【官方文档】Fluent Bit 安装
  10. retinex算法原理