一、概述

目前市面上有各式各样的翻译软件,在中国相对常见的是英汉互译类的软件,如金山词霸等,但是进行国际化的程序开发的时候,经常需要进行多个语言的翻译,比如英语译成俄文,中文译成西文等,但是市场上很少见到这么多的专业翻译软件,即便有,谁的机器装这么多的大型软件,在经济上和机器承受能力上都有一定的限制。后来发现网上有很多的在线翻译的网站,比如雅虎的“翻译鱼”,可以实现N多种语言的互译,对相关的工作能起到很大的帮助作用。但是由于浏览器固有的缺陷,使用起来还有一定的不方便性,根据本人的习惯,决定开发一个客户端程序,并把翻译鱼的功能嵌入到程序中,那样就会很方便了。

二、开发

说干就干,有了上述的想法后,本人利用两个小时的时间,成功的实现了自己的“梦想”,拥有了一套完全个性化的多语言翻译软件。

开发环境:VS2003

开发语言:C#

数据库:无

1. 系统初始化

为了简洁,程序只有一个主界面,没有任何的配置界面及配置文件。说到这里,也许您会问,没有配置文件,那么要如何设定系统能翻译哪些语言呢?这个很简单,我直接抓取了翻译鱼的网页,对其中的文本进行分析,找到了它所能处理的语言列表,直接放在我的界面上就可以了,这样无论它以后增加了什么语言,我都可以自动适应。

抓取网页使用了WebClient这个类,用法如下:

byte[] bytes = client.DownloadData("http://fanyi.cn.yahoo.com/translate_txt?more=1");

string content = System.Text.Encoding.UTF8.GetString(bytes);

int pos = content.IndexOf("<div class=\"tctrl\">");

int pos_ = pos;

while (pos > 0 && pos_ > 0)

{

pos = content.IndexOf("<option",pos_);

if (pos > 0)

{

pos_ = content.IndexOf("</option>",pos);

if (pos_ > 0)

{

string option = content.Substring(pos,pos_ - pos + 9);

System.Diagnostics.Debug.WriteLine(option);

FillSingleOption(option);

}

}

}

上述函数中引用了一个名为FillSingleOption的函数,它的作用是把每一行语言取出来,填充到界面上的语言选择框中,代码主要部分如下:

int pos = option.IndexOf(" value=\"");

int pos_ = option.IndexOf("\"",pos + 1);

string value = option.Substring(pos + 8,pos_ - pos -2);

pos = option.IndexOf(">");

pos_ = option.IndexOf("</");

string text = option.Substring(pos + 1,pos_ - pos -1 );

if (hash[value] == null)

{

hash[value] = text;

Lang lang = new Lang();

lang.Value = value;

lang.Text = text;

cobLang.Items.Add(lang,System.Windows.Forms.CheckState.Unchecked);

}

呀呀呀,真是一环套一环,上面这个小小的函数中,居然又出现了一个新的类,名字叫Lang,它是干什么的呢?它就是用来向CheckList中填充信息用的。为什么要向Items中加一个类呢,因为添加的时候,只能添加一个对象,而我需要记录的信息包括zh-en这样的代码和“中文-英文”这样的文字,所以没办法,只好麻烦一些,写了个类。这个类的代码只有几行,就是两个属性,记录两个值,不过有一点需要注意,必须重写ToString函数,否则添加到CheckList中的将显示为“Object”字样。

类的代码如下:

public class Lang

{

private string value_;

private string text;

public string Value

{

get{return value_;} set{value_ = value;}

}

public string Text

{

get{return text;} set{text = value;}

}

public override string ToString()

{

return text;

}

}

哇,真是有史以来最小的一个类了,不过它也算完成了它的史命了。

到目前为止,初始化结束!

2. 翻译

程序启动后,真正的工作就要开始了,我设定了两个文本框,一个用于输入源字符,另一个用于输出,与翻译鱼不同的是,我这里可以同时选择多种翻译条件,并且在输出的时候,拼在一起,特别方便。

如何实现翻译呢,经过对翻译鱼网页仔细分析,发现可以用GET方式来得到结果,如下:http://fanyi.cn.yahoo.com/translate_txt?more=1&trtext=China&lp=en_ru

上述URL中,有三个参数,分别说明如下:

Ø more=1 这个是好像必须要写,是它系统规定的

Ø trtext=China 这个指的是需要翻译的源内容

Ø lp=en_ru 这个指的是用何种规则来实现翻译,当前指的是英语翻译成俄文

那么它翻译的结果会以什么样的形式来返回呢?我们都希望这个页面直接返回一个结果就行了,可是我没能如愿,它实际上返回的还是一个页面,翻译结果被嵌入其中,没办法,只能用程序把翻译结果再深挖出来,好在有前面的网页抓取的经验,我们可以直接看一下相关的代码:

string result = "";

foreach(object o in cobLang.CheckedItems)

{

Lang lang = (Lang)o;

string src = txtSrc.Text.Trim();

if (src != "")

{

string url = "http://fanyi.cn.yahoo.com/translate_txt?more=1&trtext=" + src + "&lp=" + lang.Value;

byte[] bytes = client.DownloadData(url);

string content = System.Text.Encoding.UTF8.GetString(bytes);

int pos = content.IndexOf("<div id=\"pd\" class=\"pd\">");

if (pos > 0)

{

int pos_ = content.IndexOf("</div>",pos + 1);

if (pos_ > 0)

{

result += lang.Text + "\r\n" + content.Substring(pos + 24,pos_ - pos - 24).Trim() + "\r\n";

}

}

}

txtResult.Text = result;

}

哇,看起来挺乱,其实一点也不乱,就是取出网页的内容,找到相应的位置,并找到结束符号,取出相应内容即可,对了,别忘了对取出的结果做一下Trim。

仔细看一下上述代码,发现已经同时实现了多种翻译同时进行,并且把结果进行拼接。

三、结束

太抽象了,来个直观的,看一下界面吧:

对了,输出结果框的字体别忘了改成Arial,如果用默认的宋体,可能有些文字显示的不好看,但是如果有些国家的文字无法正确显示,那就不是本程序的问题了,需要你的系统自己去安装相应的语言包了。

本文转自Aicken(李鸣)博客园博客,原文链接:http://www.cnblogs.com/isline/archive/2010/04/09/1708401.html,如需转载请自行联系原作者

C#开发多语言翻译软件相关推荐

  1. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一第1章 C语言与内存1.1 引言...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第1章,第1.1节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"华章计算机&quo ...

  2. 在Linux下开发多语言软件(gettext解决方案)

    最近的项目出现了一个bug.项目是基于一个已有的成熟开源软件之上做修改的,新写了加解密库,用于为该成熟开源软件增添加解密功能.功能增加完成后效果都很好,可是就是中文出不来了,也就是说没办法自适应多语言 ...

  3. 系列:iOS开发-C语言基础

    #系列:iOS开发-C语言基础 之前也说了iOS中的OC是扩充C的面向对象编程语言 那么无论是从什么角度来说都要首先回顾一下C的内容,虽然很多人在大学的时候都有学习过C语言,一提到谭浩强,我估计90% ...

  4. python是基于什么语言开发-python是哪个国家的人开发的语言

    python是Google的吉多·范罗苏姆设计的,Python是一种跨平台的计算机程序设计语言.作为一种面向对象的动态类型语言,它最初设计用于编写自动化脚本. 是Google的吉多·范罗苏姆设计的. ...

  5. VC开发多语言界面支持的简单方法

    VC开发多语言界面支持的简单方法 作者:成晓旭 (需要完整源代码请留言) 最近在做一个小程序,要求实现对多语言界面显示支持功能,并且,界面显示内容用户能够自己设置. 初步设计用INI文件来配置显示内容 ...

  6. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  7. 李洪强漫谈iOS开发[C语言-038]-if else if语句

    李洪强漫谈iOS开发[C语言-038]-if else if语句

  8. 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一2.4 位运算构建特定二进制数...

    本节书摘来自异步社区<嵌入式Linux与物联网软件开发--C语言内核深度解析>一书中的第2章,第2.4节,作者朱有鹏 , 张先凤,更多章节内容可以访问云栖社区"异步社区" ...

  9. [译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目

    介绍 开发多语言支持的ASP.NET Core 2.x Web应用程序需要大量的基础架构设置,并且耗费时间和精力.这篇文章,我们将使用LazZiya.ExpressLocalization nuget ...

  10. [vue] 你有使用过vue开发多语言项目吗?说说你的做法?

    [vue] 你有使用过vue开发多语言项目吗?说说你的做法? 使用Vue-i18n 加载不同的语言配置文件, 重要是初始化时,判断当前语言环境,要想好存储方案 采用i18n来解决国际化问题,关于语言环 ...

最新文章

  1. field list什么意思_从源码中学Vue(六)「解密」为什么操作数组的方法也会触发视图更新...
  2. POJ 2342 (树形DP)
  3. ubuntu 通过 海康sdk调用摄像头抓图片
  4. logstash 过虑nginx访问日志
  5. axure 内部框架内容下滑_Axure教程:转盘抽奖交互原型
  6. Form.close与Application.Exit()的区别
  7. C++ 多态性之虚函数抽象类纯虚函数
  8. AT指令:AT+CPMS
  9. databinding include 控件空指针_Android Jetpack系列——细说DataBinding
  10. 02--Activiti初始化表
  11. 存储知识学习之--IP网络存储iSCSI的概念与工作原理
  12. sourceTree git工作流无法结束
  13. 国际象棋渲染测试软件,多线程运算效能Fritz国际象棋测试_CPUCPU评测-中关村在线...
  14. html编辑中,出现报错 semi-.colon excepted css(………)
  15. Cubieboard安装系统
  16. 四年磨一剑:我是如何拿到蚂蚁offer的?
  17. Golang中AK/SK认证的实现
  18. 跟它比,期货简直 Low 爆了!
  19. Java面试官:java高级工程师简历csdn
  20. doesn‘t have a default value /前端控制台network、console

热门文章

  1. HTML5设置直线长度,cad绘制直线怎样设置长度
  2. HTML个人网站设计(源码)
  3. 抖音网红穿的服装品牌,那些爆款女装号都是怎么拍的呢?
  4. 建网站域名服务器那个好,如何选择好建网站的域名?
  5. 思科模拟器中的交换机使用方法
  6. 登录时用户名或密码错误弹窗提醒重新登录
  7. css画钟表_css3实现钟表效果
  8. 全自动过滤器:全自动自清洗过滤器对给排水总结的经验
  9. 微信与企业微信内嵌浏览器的UserAgent
  10. 苹果自带的清理软件_为大家推荐几款苹果电脑清理软件中排名较高的软件