漫游的备忘录
多语种网站设计及实现思路
2012-2-24 漫游

以ASP网站为例,以中文、英文、日文3种语言为例。本文只论思路及示例实现,具体代码自行编写补充。


数据库设计时,可以用一个比较笨的办法,即文字字段,有几个语种就加几个字段。例如新闻标题和内容,title0和content0是中文的标题和内容,title1和content1是英文的标题和内容,title2和content2是日文的标题和内容,如此类推。


后台管理中,先设置一个变量,如:

<%

const langStr = "中文|English|日本語"

langTitle = split(langStr    ,"|")'语言项

lang = ubound(langTitle)    '语言种类数,0为1种,1为2种

%>



这样就可以用循环的方法来修改同一记录,例如:

<%

content0 = rs("content0")

content0 = rs("content0")

content0 = rs("content0")



for temp = 0 to lang

%>

  
<input name="title<%=temp%>" type="text" value="<%=rs("title"&temp)%>">

   <textarea id="content<%=temp%>" name="content<%=temp%>">

   <%=rs("content"&temp)%>

   </textarea>

<%

next

%>



前台处理,也有同样的一个变量lang来判别当前是哪个语种,可以据此来调用相应数据库的字段。

可以先做好中文版的程序,连同中文版单独使用的图片等媒体都放在/cn/文件夹下,调整好了后就复制到/en/和/jp/,共用文件夹放根目录下如/inc和/images,顺利的话访问各个语种目录都能自动读取对应语种的数据了。

如果使用url重写的话,程序文件只需要放在一个地方,不必复制多份,更方便维护了。重写规则只要有几个语种就复制几次,如:

RewriteRule /cn/index.html$ /code/index\.asp

RewriteRule /en/index.html$ /code/index\.asp

RewriteRule /jp/index.html$ /code/index\.asp



<%

realpath = LCase( Request.ServerVariables( "PATH_INFO" ) )    '实际路径

showpath = LCase( Request.ServerVariables( "HTTP_X_REWRITE_URL" ) )    '重写出来的路径

'有重写url的话使用showpath变量进行判别,没有则使用realpath。

if instr(showpath,"/en/")>0 then

    lang=1

elseif instr(showpath,"/jp/")>0 then

    lang=2

else

    lang=0

end if



rs.open "select top 1 content" & lang & " as content, title" & lang & " as title where ....",conn,1,1

response.write rs("title")

%>