C/S应用程序平台多语种技术是一种基于C/S应用技术结构平台的关于多语种的转换和翻译技术。本设计基于Visual Studio.Net集成开发环境,采用SQL Server2000进行数据库后台开发。通过采用数据字典实现应用系统的静态文本转换;通过使用Visual Studio.Net上的默认控件来实现提示信息的多语种转换;采用JavaScript解决报警信息的多语种转换。能够在软件开发工具和开发平台中能够自由进行多语种切换,增强软件开发工具和开发平台的使用性与通用性。本设计采用.NET技术,跨平台性强,运行速度快,用户可以快速、方便的进行操作,达到了预期效果。
关键词: 多语种;数据字典;脚本语言
4.1 功能分析
本设计实现的主要功能有三个:静态文本中的多语种转换,它分为单词和语句;在系统的消息中进行多语种的转换,系统消息分为警告、报警、提示等;报表系统前台页面表项的动态转换。
设计分为三个部分:首先在C/S应用程序的按钮上实现静态文本的多语种转换;然后通过设计一个数据字典实现动态的转换;最后用一个报表系统的提交页面实现页面的多语种转换。
设计的主要设计思路为“三层结构”,如图4-1所示,具体描述如下。
表现层:位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
中间业务层:负责处理用户输入的信息,或者是将这些信息发送给数据访问层进行保存,或者是调用数据访问层中的函数再次读出这些数据。中间业务层也可以包括一些对“商业逻辑”描述代码在里面。
数据访问层:仅实现对数据的保存和读取操作。数据访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。
图4-1三层结构图
4.2 实现流程
本设计的系统实现流程如图4-2所示,通过一个定义的前台按钮,在建立SQL连接中访问ADO接口,再进入数据库访问数据字典,然后根据需求的不同,访问数据项。
图4-2 流程图
通过前面的分析,本设计开发一个基于Visual Studio.net软件平台的多语种转换模块,实现静态文本中的多语种转换、系统的消息中进行多语种的转换、在生成报表的过程中多语种的转换的功能。在设计与开发中,重点关注静态文本中的多语种转换、系统的消息中进行多语种的转换。探讨既能实现基本的单词转换,又能实现可靠的语意转换的实现方法。
4.3 模块设计
本设计由三个主要模块组成。即静态的多语种转换、动态的多语种转换、报表系统前台页面表项的动态转换。具体的模块设计如图4-3所示。
图4-3 模块设计图
4.4 详细设计
4.4.1 静态文本中的多语种转换
静态文本的多语种转换分为单词和语句,本设计重点讨论单词在静态文本中的转换。
下面以一个简单的播放程序为例(如图4-4所示)来说明如何在C/S应用系统中进行单词的静态转换。
图4-4 播放程序图
通过在说明这个选项中添加一个功能按钮来实现语种的转换如图4-5所示。
图4-5 播放程序中的功能按纽
在选项中点击按钮“英语”或“中文”时,就会把静态文本中的语种转换过来,效果如图4-6所示。
图4-6 转换后的语种图
具体实现代码如下所示。
private void menuItem2_Click(object sender, System.EventArgs e) //英文控制按纽
{
menuFile.Text="File";
menuOpen.Text = "Open File";
menuLoad.Text="Load File";
menuSave.Text="Save Anther File";
menuClose.Text="Close File";
menuDelSelect.Text="Delete Select File";
menuDelAll.Text="Delete All File";
menuExit.Text="Exit";
menuMedia.Text="Media";
menuPlay.Text="Play";
menuPause.Text="Pause";
menuStop.Text="Stop";
menuPrevious.Text="Previous File";
menuNext.Text="Next File";
menuDiploid.Text="Diploid Play";
menuHalf.Text="Half Play";
menuLeft.Text="Left";
menuRight.Text="Right";
menuFull.Text="Full screen";
menuHelp.Text="Help";
menuAbout.Text="About xlFancyPlay";
menuItem2.Text="English";
menuItem3.Text="Japanese";
menuItem4.Text="Chinese";
}
private void menuItem3_Click(object sender, System.EventArgs e)//日语控制按钮
{
menuFile.Text="文件";
menuOpen.Text = "君の名";
menuLoad.Text= "女風呂";
menuSave.Text="消えたと";
menuClose.Text="もっとも";
menuDelSelect.Text="知人の実見談";
menuDelAll.Text="伝説";
menuExit.Text="銭湯";
menuMedia.Text="知らない";
menuPlay.Text="絶える";
menuPause.Text="なか";
menuStop.Text="とちわか";
menuPrevious.Text="風景";
menuNext.Text="部屋";
menuDiploid.Text="子供";
menuHalf.Text="風呂";
menuLeft.Text="伝説";
menuRight.Text="相撲版";
menuFull.Text="あんよ";
menuHelp.Text="ほんとう";
menuAbout.Text="关于 xlFancyPlay";
menuItem2.Text="英国语";
menuItem3.Text="日本语";
menuItem4.Text="中国语";
}
private void menuItem4_Click(object sender, System.EventArgs e)//中文控制按钮
{
menuFile.Text="文件";
menuOpen.Text = "打开文件";
menuLoad.Text="装入文本文件";
menuSave.Text="文本文件另存为";
menuClose.Text="关闭文本文件";
menuDelSelect.Text="删除选顶列表项";
menuDelAll.Text="删除所有列表项";
menuExit.Text="退出";
menuMedia.Text="媒体";
menuPlay.Text="播放";
menuPause.Text="暂停";
menuStop.Text="停止";
menuPrevious.Text="上一个";
menuNext.Text="下一个";
menuDiploid.Text="倍速播放";
menuHalf.Text="半速播放";
menuLeft.Text="左声道";
menuRight.Text="右声道";
menuFull.Text="全屏";
menuHelp.Text="说明";
menuAbout.Text="关于 xlFancyPlay";
menuItem2.Text="英文";
menuItem3.Text="日文";
menuItem4.Text="中文";
}
4.4.2 报警、提示、警告信息的多语种转换
在报表系统进行多语种的转换就是对消息进行多语种的转换,系统消息分为警告、报警、提示等,用Visual Studio.Net系统平台上所默认的控件或者用脚本语言实现转换功能。
报表系统的信息上传界面如图4-7所示。
图4-7 信息上传界面
通过右上的四个按钮来控制语种的转换,“提交”按钮控制着信息的上传。系统信息的语种转换是通过选用脚本语言来控制和实现的。关于对用脚本语言进行消息的多语种转换,其主要是用于对验证为空的信息的语言转换。
英语提交前台上的验证信息转换如图4-8所示。
图4-8 英语提交前台上的验证信息转换
在中文提交前台的界面如图4-9所示。
图4-9 中文提交前台的验证信息转换
具体实现代码如下所示。
以上代码的功能是通过加载页面的元素getElementById来判spankiss的值,再最终决定是调用英文还是中文的标识。
在限制数据上传的位数时,采用RangeValidator控件,中文的界面上的报警信息如图4-10所示。
图4-10 中文界面报警信息
而转换过来的英文界面的报警信息如图4-11所示。
图4-11 英文界面报警信息
具体实现代码如下所示:
this.RangeValidator1.ErrorMessage="ToyId is 3 Bit";//定义控件的信息内容
this.RangeValidator3.ErrorMessage="ToyDescription is less than 125 chinese wrod";
this.RangeValidator2.ErrorMessage="CategoryId is 3 Bit";
this.RangeValidator4.ErrorMessage="ToyRate is currency";
this.RangeValidator5.ErrorMessage="BrandId should be 3 Bite";
this.RangeValidator6.ErrorMessage="LowerAge is less than 125";
this.RangeValidator8.ErrorMessage="UpperAge is less than 125";
4.4.3 报表系统前台页面表项的动态转换
在数据库技术中,在数据字典中进行单词多语种的关联,使前台能够自由的调用数据,数据字典(如图4-12所示)是指在数据库中所有表的集合。
图4-12 数据字典表
通过调用一个按钮调用表中的列来进行动态的调用,效果图如图4-13所示。
图4-13 报表上传页面的中文界面
通过英文转换后的界面如图4-14所示。
图4-14报表上传页面的英文界面
其重要的代码如下所示。
从数据库中访问并提取数据项
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public SqlConnection Sqlcon()
{
SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=;database=jloa");
return conn;
}//建立数据库连接
public string sqlSelect(string ToyId,string ToyName,string ToyDescription,string CategoryId,string ToyRate,string BrandId,string Photo,string ToyQoh,string LowerAge,string UpperAge,string ToyWeight,string ToyImgPath)
{
SqlConnection con=this.Sqlcon();
con.Open();
SqlCommand cmd =new SqlCommand("select ChineseWord from Dic ",con); //从数据字典中调用chineseWord项
SqlDataReader rd=cmd.ExecuteReader(); //读SQL语句的值;
string temp="-";
int i =0;
while(rd.Read()) //循环读SQL命令
{
temp+=rd["ChineseWord"].ToString()+"-"; //把读出来的值放到字符中,用间隔隔开;
i++;
}
con.Close();
return temp;
}
public string sqlSelect1(string ToyId,string ToyName,string ToyDescription,string CategoryId,string ToyRate,string BrandId,string Photo,string ToyQoh,string LowerAge,string UpperAge,string ToyWeight,string ToyImgPath)
{
SqlConnection con=this.Sqlcon();
con.Open();
SqlCommand cmd =new SqlCommand("select EnglishWord from Dic ",con);
SqlDataReader rd=cmd.ExecuteReader();
string temp="-";
int i =0;
while(rd.Read())
{
temp+=rd["EnglishWord"].ToString()+"-";
i++;
}
con.Close();
return temp;
}
public int sqlQuery(string str)
{
SqlConnection con=this.Sqlcon();
con.Open();
SqlCommand cmd =new SqlCommand(str,con);
int i=cmd.ExecuteNonQuery();
con.Close();
return i;
}
}
}
对从数据库提出的数据进行转换。
Class1 tool=new Class1();
string i=tool.sqlSelect(this.Label2.Text.ToString(),this.Label5.Text.ToString(),this.Label4.Text.ToString(),this.Label3.Text.ToString(),this.Label11.Text.ToString(),this.Label10.Text.ToString(),this.Label9.Text.ToString(),this.Label8.Text.ToString(),this.Label7.Text.ToString(),this.Label6.Text.ToString(),this.Label12.Text.ToString(),this.Label14.Text.ToString());
Label2.Text=i.Split('-')[1].ToString().Replace("cToyId","ToyId"); //从数据库表中取出某一字段的值,然后再次分配。
Label5.Text=i.Split('-')[2].ToString().Replace("vToyName","ToyName");
Label4.Text=i.Split('-')[3].ToString().Replace("vToyDescription","Detail");
Label3.Text=i.Split('-')[4].ToString().Replace("cCategoryId","CateId");
Label11.Text=i.Split('-')[5].ToString().Replace("mToyRate","ToyRate");
Label10.Text=i.Split('-')[6].ToString().Replace("cBrandId","BrandId");
Label9.Text=i.Split('-')[7].ToString().Replace("imPhoto","Photo");
Label8.Text=i.Split('-')[8].ToString().Replace("siToyQoh","ToyQoh");
Label7.Text=i.Split('-')[9].ToString().Replace("siLowerAge","LowerAge");
Label6.Text=i.Split('-')[10].ToString().Replace("siUpperAge","UpperAge");
Label12.Text=i.Split('-')[11].ToString().Replace("siToyWeight","Weight");
Label14.Text=i.Split('-')[12].ToString().Replace("vToyImgPath","ImgPath");
this.Button3.Text="Refer";
this.Button2.Text="Chinese";
this.Button1.Text="English";
this.Button5.Text="Japenese";
this.Label13.Text=" refering please!";