前段時(shí)間在寫(xiě)一個(gè)小程序。用的是 ASP+MSSQL/MYSQL。要求能夠同時(shí)出簡(jiǎn)/繁中文版本。
就碰到了一些ASP的國(guó)際化、本地化的問(wèn)題,其中的一些處理技巧,與大家共享。
1 HTML頁(yè)面、Web應(yīng)用、ASP 程序源文件全部采用 UTF-8 編碼。
在文件頭部加入行<%@ LANGUAGE=JScript CODEPAGE=65001%>
2 SQL Server 2000 數(shù)據(jù)庫(kù):
??? 1 數(shù)據(jù)庫(kù)字符串字段采用 NVARCHAR/NTEXT/NCHAR Unicode 字符類型。
??? 2 數(shù)據(jù)庫(kù)操作SQL 中,字符串全部加 N 前綴: SELECT * FROM TABLE WHERE FIELD LIKE N'中文%'
3 ASP 程序如果要訪問(wèn)文件,需要用如下代碼打開(kāi) UTF-16 格式文件:
FileSystemObject.OpenTextFile(file,1,false,-1);
保證在不同平臺(tái)下,相同文件都能夠正確讀取。
4 ASP 源文件中,不包含任何語(yǔ)言相關(guān)字符串,如標(biāo)題、錯(cuò)誤消息。這些消息統(tǒng)一保存到某個(gè)文件inc_l10n.asp中。另外,提供一個(gè) inc_strutil.asp 程序,輔助格式化字符串。
這樣,要更換語(yǔ)言版本,只要更新的 inc_l10n.asp 即可。
inc_l10n.asp
<%
var l10n_title = "ASP Application Title";
var l10n_about= "About ASP Application";
var l10n_dict_homename = "HOME NAME";
%>
inc_strutil.asp:
<%
//Replace a substring in a String
//
function replaceAll(data, from, to) {
??? var buf = "";
??? var pos = -1;
??? var i = 0;
??? while ((pos = data.indexOf(from, i)) != -1) {
??????? buf = buf + (data.substring(i, pos))+ to;
??????? i = pos + from.length;
??? }
??? buf = buf + data.substring(i);
??? return buf;
}
//return the substitution result from Resource String
//Invoke examples: getString("Substitution Example: $1 $2","111","222")
//Invoke Result: "Substitution Example: 111 222"
function getString()
{
??? if ( arguments.length == 0 )
??????? return "";
??? if ( arguments.length == 1 )
??????? return ""+arguments[0];
??? var rawStr = arguments[0];
??? var i = 0;
??? for(i=1;i<arguments.length;i++){
??????? rawStr = replaceAll(rawStr,"$"+i,arguments[i]);???
??? }
??? return rawStr;
}
%>