C#开发多语言翻译软件

简介:

一、概述

    目前市面上有各式各样的翻译软件,在中国相对常见的是英汉互译类的软件,如金山词霸等,但是进行国际化的程序开发的时候,经常需要进行多个语言的翻译,比如英语译成俄文,中文译成西文等,但是市场上很少见到这么多的专业翻译软件,即便有,谁的机器装这么多的大型软件,在经济上和机器承受能力上都有一定的限制。后来发现网上有很多的在线翻译的网站,比如雅虎的“翻译鱼”,可以实现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。

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

三、结束

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

clip_image002

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


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

相关文章
|
1月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
116 51
|
1天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
25 12
|
1月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
46 1
|
1月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
62 2
|
1月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
46 1
|
1月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
44 1
|
1月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
40 3
|
7天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
45 12
|
1月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
54 4