笨笨的思想片断

零碎片断,杂七杂八。
posts - 25, comments - 79, trackbacks - 0, articles - 0

ASP 程序的国际化/本地化

Posted on 2006-03-20 16:11 笨笨 阅读(1291) 评论(0)  编辑  收藏 所属分类: 软件开发

前段时间在写一个小程序。用的是 ASP+MSSQL/MYSQL。要求能够同时出简/繁中文版本。
就碰到了一些ASP的国际化、本地化的问题,其中的一些处理技巧,与大家共享。

1 HTML页面、Web应用、ASP 程序源文件全部采用 UTF-8 编码。
在文件头部加入行<%@ LANGUAGE=JScript CODEPAGE=65001%>

2 SQL Server 2000 数据库:
    1 数据库字符串字段采用 NVARCHAR/NTEXT/NCHAR Unicode 字符类型。
    2 数据库操作SQL 中,字符串全部加 N 前缀: SELECT * FROM TABLE WHERE FIELD LIKE N'中文%'

3 ASP 程序如果要访问文件,需要用如下代码打开 UTF-16 格式文件:
FileSystemObject.OpenTextFile(file,1,false,-1);
保证在不同平台下,相同文件都能够正确读取。

4 ASP 源文件中,不包含任何语言相关字符串,如标题、错误消息。这些消息统一保存到某个文件inc_l10n.asp中。另外,提供一个 inc_strutil.asp 程序,辅助格式化字符串。
这样,要更换语言版本,只要更新的 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;
}
%>


只有注册用户登录后才能发表评论。


网站导航: