相互转换的海词问答与网友补充:
相互转换的相关资料:
相关词典网站:急求:怎么做到中英文网站切换有关问题! - ASP.NET当前位置:& &&&急求:怎么做到中英文网站切换有关问题!急求:怎么做到中英文网站切换有关问题!&&网友分享于:&&浏览:88次急求:如何做到中英文网站切换问题!!请问,由于没有考虑到后期扩展,刚做好一个中文版 &
& ,老板让马上做一个英文的出来,急啊!
该网站基本是一个文章管理系统,中文版的基本情况是:除了标头和标尾,部分硬编码外,其他的内容都是从数据库中读取的(包括栏目导航和内容)! &
请问:我想在现有website中新建一个En文件夹,再把现有的网站内容代码放进去,再增加一个专放英文内容的数据库,这种方法是否可行? &
& 要知道的是,如何能自动在两个数据库之间切换? &
& 谢谢解答! ------解决方案--------------------其实不用再新建个En文件夹,而是在原来的程序上面做转换:
1.首先数据库是要分开的,这点是肯定的;
2.网站动态的部分建议将原来类的基础上写个重载的方法,主要用于转换不同数据库;
3.网站的静态部分(LZ说的硬编码)方面可以用不同的样式文件来控制转换.
------解决方案--------------------对楼主的原来设计没有一个认识
大概理解一下吧你原来网站上的硬编码问题应该只能手改比较快了。
动程序的话最好不过速度慢
而数据库中 站点的 拦目 导航等信息肯定和 文章应该是分开的吧, 那肯定也要再作一份
也加到库中,加个字段
在程序的ADO中加判断吧。
其实楼主的问题很简单,如果为救急
那干脆 COPY一份
然后硬改之。
如果有时间的话,可以改造语言环境。加以不要用.NET国际化资源文件。那样时间慢
还不便修改。
一些国外软件工程都是自己写一个语言类。 准备各种语言的XML文件并统一编码,里边的关键字都一样。它的值就是各种语言的字符串。
写一个静态加载类,把这几个XML根据需要时加载到高速缓存中,或者APP中。然后根据关键字GET出需要的值而语言种类可以根据用户自己选择(存SESSION)。
------解决方案--------------------wangkun9999(一朝春尽红颜老,花落人亡两不知!)
1.首先数据库是要分开的,这点是肯定的;
2.网站动态的部分建议将原来类的基础上写个重载的方法,主要用于转换不同数据库;
3.网站的静态部分(LZ说的硬编码)方面可以用不同的样式文件来控制转换.
感觉挺好~~~~~
实在不成 ~
然后硬改之~~
------解决方案--------------------说白了还是net全局变量的应用:
1.首先你在Global.asax.cs的Application_Start事件中放一个存数据库连接的全局变量(原来放在web.config文件里面的不要了)如:
Application[ &ConnectionString &]= &Data Source=.;uid=Pwd=;database=CNdatabase &;
2.页面层的切换的选项是服务器端控件,如 &asp:LinkButton,在事件中做转换数据库的操作,然后得新加载页面就转换过来:
private void LinkButton1_Click(object sender, System.EventArgs e)
Application[ &ConnectionString &]= &Data Source=.;uid=Pwd=;database=ENdatabase &;
Response.Redirect( &你要指向的页面 &);
------解决方案--------------------最简单的办法就是把所有的文本放在数据库中,文本包括中文,英文的,其实哪种语言都可以。页面上语言的动态切换其实也不难,比如在有文本的地方做标记,这个标记可以是这段文本在数据库中ID,切换的时候根据当前的语种从数据库中取相应的文本就可以了。
下面列出一个大概的设计架构:
表二 文本,该表引用表一,主键可能是本表的ID加上表一的外键的复合
设计一个父页面,这个页面可以根据当前的语种从数据库中取出该页需要的文本然后在有标记的地方替换文本就ok了。
当然了这只是一个粗略的架构,细节可能还有很多。
------解决方案--------------------1.首先你在Global.asax.cs的Application_Start事件中放一个存数据库连接的全局变量(原来放在web.config文件里面的不要了)如:
Application[ &ConnectionString &]= &Data Source=.;uid=Pwd=;database=CNdatabase &;
2.页面层的切换的选项是服务器端控件,如 &asp:LinkButton,在事件中做转换数据库的操作,然后得新加载页面就转换过来:
private void LinkButton1_Click(object sender, System.EventArgs e)
Application[ &ConnectionString &]= &Data Source=.;uid=Pwd=;database=ENdatabase &;
this.Page.RegisterStartupScript( &ff &, &调用页面上换肤功能的脚本函数 &);
Response.Redirect( &你要指向的页面 &);
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有 很多公司都喜欢把公司网站搞成双语言的,常见的办法是:做两份相同的程序,然后用不同的文件夹区分开来,然后点切换语言时,链接到不同的文件夹去就OK了,这种办法呢,如下:
好处是:各自的版本是分离开来的,比较稳定,不会出现互相干扰(共用数据库资料的除外!)等情况;
弊端是:改动一个功能,要把变更的操作(代码逻辑啊、图片PS啊、还有数据库等等)在所有的语言版本上面再重复一次,加重了操作量。
本来打算这样子搞的,但上头发话了,这样子代码管理比较麻烦,让哥哥想别的办法喔...那就想咯,别说,还真的想出了一个方法,虽然还未成熟,也不太稳定,但胜在不用修改原来的逻辑代码,而且只有一份代码够用了(是&够用&,不&是完美哦&!),我就不卖关子了,反正也不是什么秘密:说白了,其实就是用 js的replace()方法处理的,嘿嘿,只不过为了能让它能够快速布置,所以,需要做一些规范,怎么规范呢?还不太成熟哈,接着往下看就清楚了。
页面在客户端处显示给user看的都是&body&...&/body&中的内容,既然如此,我直接把&body&...&/body&中的内容中需要replace的中文全部replace掉再呈现出来就OK了吧,说干就干,直接先写一个&翻译字典&方法,如下:
1 function setEnglish(bodyString) {
var result = bodyS
result = result.replaceAll('?料量','Issue Qty');
result = result.replaceAll('?位?','Unit');
result = result.replaceAll('待交?','To be Delivered');
result = result.replaceAll('??量','Shoulsd Issue');
result = result.replaceAll('?用量','Should Use');
result = result.replaceAll('操作者','Operator');
result = result.replaceAll('??中','Editing');
result = result.replaceAll('??者','Confirmed By');
result = result.replaceAll('需求量','Required Qty');
result = result.replaceAll('需求日','Required Day');
result = result.replaceAll('?用量','Used Qty');
result = result.replaceAll('跨工?','Inter-Shop Order');
result = result.replaceAll('??人','Prepared by');
result = result.replaceAll('?耗率','Yield Loss Rate');
result = result.replaceAll('超耗量','Over Consumption ');
result = result.replaceAll('超比例','Over-proportional');
result = result.replaceAll('?案日','Close Date');
result = result.replaceAll('?料量','Issue Qty');
result = result.replaceAll('?工?','Change Shop Order');
result = result.replaceAll('提??','Report Qty');
result = result.replaceAll('??量','Scrap Form');
result = result.replaceAll('???','Scrap Form');
result = result.replaceAll('??品','Scrap Unit');
result = result.replaceAll('?位?','Unit');
result = result.replaceAll('移??','Transfer Qty');
result = result.replaceAll('移入量','Move In Qty');
result = result.replaceAll('???','Transaction Code');
result = result.replaceAll('接受量','Received Qty');
result = result.replaceAll('?存量','Inventory');
result = result.replaceAll('?移?','Net Transfers');
result = result.replaceAll('待?量','To be Issued');
result = result.replaceAll('待??','To be Scrapped');
result = result.replaceAll('待?理','To be Processed');
result = result.replaceAll('待重工','To be Reworked');
result = result.replaceAll('待交?','To Be Delivered');
result = result.replaceAll('待分配','To be Assigned');
result = result.replaceAll('物流中','Logistics');
result = result.replaceAll('?料量','Incoming Qty');
result = result.replaceAll('良品?','Good Unit Qty');
result = result.replaceAll('材料批','Component Part Lot Batch');
result = result.replaceAll('投入?','Input Qty');
result = result.replaceAll('完成日','Completion Date');
result = result.replaceAll('在?量','WIP');
result = result.replaceAll('在移量','Transit Qty');
result = result.replaceAll('全 部','All');
result = result.replaceAll('分派?','Distribute Qty');
result = result.replaceAll('不良?','Reject Qty');
result = result.replaceAll('已??','Inspected');
result = result.replaceAll('已移?','Transferred');
result = result.replaceAll('已交?','Shipped');
result = result.replaceAll('工??','Shop Order No.');
result = result.replaceAll('下工站','Next Operation');
result = result.replaceAll('上工站','Previous Operation');
result = result.replaceAll('入?序','Incoming Inspection Operation ');
result = result.replaceAll('入料量','Incoming Qty');
result = result.replaceAll('?建者','Founder');
result = result.replaceAll('???','Please Choose');
result = result.replaceAll('??中','Editing');
result = result.replaceAll('物流中','In Logistics');
result = result.replaceAll('待?理','To be Processed');
result = result.replaceAll('待重工','To be Reworked');
result = result.replaceAll('待??','To be Scrapped');
result = result.replaceAll('待分配','To be Assigned');
result = result.replaceAll('待交?','To be Delivered');
result = result.replaceAll('已??','Inspected');
result = result.replaceAll('已移?','Transferred');
result = result.replaceAll('全 部','All');
result = result.replaceAll('移??','Transfer Form');
result = result.replaceAll('???','Scrap Form');
result = result.replaceAll('待交?','To be Delivered');
result = result.replaceAll('?移?','Net Transfers');
result = result.replaceAll('??人','Operator');
result = result.replaceAll('确定者','Affirmant');
result = result.replaceAll('日期起','Start Date');
result = result.replaceAll('???','Test');
result = result.replaceAll('?出','Export');
result = result.replaceAll('料?','Part No.');
result = result.replaceAll('工?','Shop Order');
result = result.replaceAll('?接','Hyperlink');
result = result.replaceAll('?位','Location');
result = result.replaceAll('??','Option');
result = result.replaceAll('??','Model');
result = result.replaceAll('?出','Export');
result = result.replaceAll('?定','OK');
result = result.replaceAll('??','Symbol');
result = result.replaceAll('?工','Standard');
result = result.replaceAll('?商','Supplier');
result = result.replaceAll('新建','New');
result = result.replaceAll('搜索','Search');
result = result.replaceAll('用?','User ID');
result = result.replaceAll('密?','Password');
result = result.replaceAll('?言','Language');
result = result.replaceAll('??','Confirm');
result = result.replaceAll('?耗','Yield Loss');
result = result.replaceAll('移出','Move Out');
result = result.replaceAll('料?','Part No.');
result = result.replaceAll('料件','Material Part');
result = result.replaceAll('??','Store');
result = result.replaceAll('重工','Rework');
result = result.replaceAll('客?','Customer Name');
result = result.replaceAll('品保','QA');
result = result.replaceAll('??','Date');
result = result.replaceAll('返回','Back');
result = result.replaceAll('注解','Remarks');
result = result.replaceAll('?型','Type');
result = result.replaceAll('周?','Weeks');
result = result.replaceAll('其他','Others');
result = result.replaceAll('良品','Good Unit');
result = result.replaceAll('材料','Component Part');
result = result.replaceAll('批?','Lot Batch No.');
result = result.replaceAll('批量','Lot Size');
result = result.replaceAll('作成','Made');
result = result.replaceAll('余量','Margin');
result = result.replaceAll('用量','Used Qty');
result = result.replaceAll('方式','Approach');
result = result.replaceAll('工?','Shop Order');
result = result.replaceAll('工序','Operation No.');
result = result.replaceAll('工序','Operation ');
result = result.replaceAll('人工','Manpower');
result = result.replaceAll('??','Status');
result = result.replaceAll('其他','Others');
result = result.replaceAll('工?','Shop Order');
result = result.replaceAll('新建','New');
result = result.replaceAll('?出','Export');
result = result.replaceAll('其他','Others');
result = result.replaceAll('搜?','Search');
result = result.replaceAll('料?','Part No.');
result = result.replaceAll('全部','All');
result = result.replaceAll('返回','Back');
result = result.replaceAll('??','Factory');
result = result.replaceAll('查?','Search');
result = result.replaceAll('确定','Confirm');
result = result.replaceAll('部?',' Department');
result = result.replaceAll('操作','Operation');
result = result.replaceAll('移入','Move In');
result = result.replaceAll('?位','Unit');
result = result.replaceAll('?明','Description');
result = result.replaceAll('?量','Qty');
result = result.replaceAll('保存','Save');
result = result.replaceAll('?','Store');
result = result.replaceAll('?','Store');
result = result.replaceAll('批','Batch');
result = result.replaceAll('迄','Until');
result = result.replaceAll('入','In');
result = result.replaceAll('出','Out');
PS:这个方法就是把传进来的东西进行翻译后,再把翻译的结果return回去的,注意:js里面没有replaceAll这个方法的,上面的是我自己加上去的,后面会给出;还有,根据翻译的字段长短,先把replace长的,再replace短的,长的一般用replace()就够了,短的最好用replaceAll(),当然有特殊情况的,这里不多说,反正遇到了就明白怎么整了;另外,怎么这么长的?呵呵,这部分可以找别人提供,还有,上面这些&result = result.replaceAll(.....)&是我直接在Excel导出来的(当然,中英对照表是让别的同事搞的,不必亲自出马),网上会的人应该比较多,排序麻,需要一点点技巧,但不难,所以不用怕,当然,我QQ空间日志有一篇日志里有提到,没加到俺QQ的,可以让你妹妹或姐姐啊加我也行,我这个人比较随和的,哈。
有了这个方法还不够,还要考虑一下用户体验的东西,比如:要用cookie记住user目前的语言种类,以便下次直接默认。
有了想法,那需要什么,就去做了,比如cookie的处理类,replaceAll()方法的定义,还有切换语言的逻辑等等,下面都有了,我先贴上网上搜集的一个cookie处理方法,源码如下:
cookiesHelper.js
1 //?cookies函?
2 //作者:翟振凯
3 function SetCookie(name,value)//????,一?是cookie的名字,一?是值
var Days = 30; //此 cookie ?被保存30天
= new Date();
//new Date("December 31, 9998");
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
10 function getCookie(name)//取cookies函?
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
16 function delCookie(name)//?除cookie
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval=getCookie(name);
if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
26 //SetCookie ("xiaoqi", "3")
27 //alert(getCookie('xiaoqi'));
30 //URL字符串操作
31 function request(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
37 //?系?追加replaceAll方法
38 String.prototype.replaceAll = function(oldStr, newStr) {
return this.replace(new RegExp(oldStr,"gm"),newStr);
PS:自己看一下方法,觉得不错的话,可以果断收走了,最后一个方法就是为字符串对象追加一个replaceAll()方法,有了这个,才能执行上面的替换所有字符的对象(这个有虾米用?要是有个GridView控件呢,下面一大堆重复的内容,单纯的replace()只能替换第一个匹配到的字符串,后面的就无能为力了,除非你多替换几次咯),这个方法也出来以后啊,就剩最后一步的啦~
在需要进行翻译的页面&head&...&/head&加入如下代码:
1 &&&&&script src="js/jquery-1.6.js" type="text/javascript"&&/script&
&script src="js/cookiesHelper.js" type="text/javascript"&&/script&
&script src="js/dict.js" type="text/javascript"&&/script&
&script type="text/javascript"&
//add by seasons.zhang
$(function () {
//根?cookie切??言??
if (getCookie("somoveLanguage") == "en") {
var result = setEnglish($("body").html());
$("body").html(result);
PS:Jquery是神马?这个必须引用的,我写的是基于jquery的(没有jquery的日子很难过啊,哈哈~)。原网页是中文的,当cookie("somoveLanguage")的值为"en"时,才调用replace方法,否则不鸟它。
神奇吧?翻译就这样搞定了!但是呢,使用过程中总会有一些毛病的,我大概说点吧,比如DropDownList控件,假如像下面的个的话
1 &select name="seasons1987"&
&option value="哥只是个传说"&哥只是个传说&/option&
&option value="哥不止是个传说"&哥不止是个传说&/option&
&option value="哥一直都是个传说"&哥一直都是个传说&/option&
&option value="不要迷恋哥"&不要迷恋哥&/option&
6 &/select&
看到上面了吗?如果调用replaceAll("哥只是个传说","Seasons1987")的话,第一项的value跟text都会发生改变了,这样子在asp.net中有一个叫做ViewStatus的东东就会找你麻烦了,一个折中的办法是把replace语句改为replaceAll("&哥只是个传说&","&Seasons1987&")就可以避免这个问题啦。又比如,一些写在&body&...&/body&里面的&script ...& ...&/script&的js方法,经过jquery的html()方法重新写入之后,会破坏它的功用的,也就是翻译之后,就失效了,我遇到的一个问题是:某个用js动态的修改&td&的width跟height的方法失效了,应该是涉及到&用js修改css属性&的功能就会有毛病,我也不太明白,目前的研究只止步于此,毕竟还要忙着解决单身问题啊,呵呵。当然,解决办法还是有的,举个例如下:
&p&哥只是个传说啊&/p&
&input name="Seasons1987" value="" onclick="XXXX" /&
&p&哥还是个传说啊&/p&
&p&征婚啊...&/p&6&&/body&
假定,上面的input有一个onclick的事件,当我把&body&全部传进行翻译时,onclick会失效的话,可以这样子改一下&body&的代码,大概如下:
&span id="body1"&&p&哥只是个传说啊&/p&&/span&
&input name="Seasons1987" value="" onclick="XXXX" /&
&span id="body2"&4
&p&哥还是个传说啊&/p&
&p&征婚啊...&/p&6
&/span&7&&/body&
然后,&head&中的代码可以这样子写:
1 &script src="js/jquery-1.6.js" type="text/javascript"&&/script&
&script src="js/cookiesHelper.js" type="text/javascript"&&/script&
&script src="js/dict.js" type="text/javascript"&&/script&
&script type="text/javascript"&
//add by seasons.zhang
$(function () {
//根?cookie切??言??
if (getCookie("somoveLanguage") == "en") {
var body1= setEnglish($("#body1").html());
var body2= setEnglish($("#body2").html());
$("#body1").html(body1);
$("#body2").html(body2);
最最后,怎么切换语言呢?随便咯,我提供一个,大家按照自己的想法来做就行了,比如弄个下接框选择语言啊,或者搞两幅小国旗,点哪切哪都行,两种都用过,这里贴下拉框的,如下:
2 &script src="js/jquery-1.6.js" type="text/javascript"&&/script&
3 &script src="js/cookiesHelper.js" type="text/javascript"&&/script&
4 &script src="js/dict.js" type="text/javascript"&&/script&
5 &script type="text/javascript"&
//add by seasons.zhang
function chgLang() {
SetCookie("somoveLanguage", $("#ddlSomoveLanguage").children('option:selected').val());
//alert(getCookie("somoveLanguage"));
window.location = 'Default.aspx';
12 &/script&
13 &/head&
&select id="ddlSomoveLanguage" onchange="return chgLang();"&
&option value="ch"&中文&/option&
&option value="en"&英文&/option&
19 &/body&
OK,收队了!
阅读(...) 评论()