[置顶].Net软件国际化自动实现的构想
posted @ 2008-06-02 17:08 堂吉柯德 阅读(1114) 评论(3) 编辑
置顶随笔 #
posted @ 2008-06-02 17:08 堂吉柯德 阅读(1114) 评论(3) 编辑
2008年6月5日 #

/**//// <summary>
/// Please put language switch button in asp page and set button name not id according to configuration.
/// please do not write any code for click event of language button.
/// button can html sumbit or imageBttuon type.
/// </summary>
private string[] LanguageButtuonIds = new string[]
{ "ChineseButton", "EnglishButton", "JapaneseButton" };
private string[] RequestLanguagNames = new string[]
{ "zh-CN", "en" ,"ja"};

/**//// <summary>
/// Please put language switch combox in asp page and set combox name not id according to configuration.
/// Please do not write any code for event of selectedIndexChanged of LanguageCultureSelectCombox also.
/// </summary>
const string LanguageCultureSelectCombox = "LanguageCultureSelectCombox";

/**//// <summary>
/// Get Request Language by user through query form variants..
/// </summary>
/// <returns></returns>
private string GetRequestLanguage()
{
for (int indexer = 0; indexer <= LanguageButtuonIds.Length - 1; indexer++)
{
//for submit buttoon
if (string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.Form [LanguageButtuonIds[indexer]]) == false)
return RequestLanguagNames[indexer];
// for imageButton
if (string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.Form[LanguageButtuonIds[indexer]]+".x") == false)
return RequestLanguagNames[indexer];
}
return string.Empty;
}

/**//// <summary>
/// Reset culture of page and request language will apply immediately without redirect.
/// You need override InitializeCulture function for all pages in whole web site.
/// You can use an inherit page class which only override InitializeCulture function once in base page also.
/// </summary>
protected override void InitializeCulture()
{
base.InitializeCulture();
string requestLanguageName = GetRequestLanguage();
if (string.IsNullOrEmpty(requestLanguageName) == false)
Session["CurrentRequestLanguage"] = requestLanguageName;
else if (System.Web.HttpContext.Current.Session != null)
requestLanguageName = (string)Session["CurrentRequestLanguage"];
if (string.IsNullOrEmpty(requestLanguageName) == false)
{
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(requestLanguageName);
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(requestLanguageName);
}
}
posted @ 2008-06-05 11:33 堂吉柯德 阅读(246) 评论(0) 编辑
2008年6月2日 #
posted @ 2008-06-02 17:08 堂吉柯德 阅读(1114) 评论(3) 编辑
2008年5月4日 #
posted @ 2008-05-04 11:48 堂吉柯德 阅读(151) 评论(0) 编辑
2008年4月28日 #
我们在进行Web开发时, 经常会遇到需要输入日期, 日期时间和数字的时候, 可惜是的是微软在Visual Studio2005时增加了很多的服务器控件, 可却没有增加Web 类型的数字和日期控件。如果直接采用TextBox, 用户界面即不友好, 同时需要在服务端增加很多不必要的验证代码, 肯定是不可取的。
虽然我们可以采用嵌入Java Script的办法来引导用户输入, 但是需要为每一个数字和日期控件增加Java Script代码, 同时也需要管理各种图片及Java Script 文件, 其实每个数字和日期的设置都是一样的, 即使是在不同的项目里,很是烦恼。 是不是有很好的解决办法呢。
答案是肯定的, 那就是做成Web服务器控件, 分别是Web 日期控件和Web 数字控件。
Web 日期控件和Web 数字控件需要解决一下问题
1: 用户友好。 要有明确的提示引导信息, 操作要方便快捷。 同时不能有太多的限制。
2: 开发友好。 所需要的图片, JavaScript 应该打包到Assembly , 开发人员不需要去管理这些资源。 同时, 应该支持简单的设计太, 即在设计的时候应该和运行时看到的样子基本一致。
主要的技术:
JavaScript
服务器控件离不开JavsScript;日期控件一般采用弹出Layer的办法来实现, 弹出一个小窗口的办法不好, 主要是弹出一个小窗口的速度慢 , 有一个明显的等待过程。 弹出Layer 的办法一般是采用PopCalenday.Js, Layer 的Html是采用JavaScript 动态生成的, 其原型应该是一个法国作者,现在网上的Web日期控件大都是在此基础上做少量修改而成的。 由于Layer Html 是采用JavaScript 动态生成的, 因此, 修改的难度比较大。这也是Web 日期控件最核心的技术部分了。
正在表达式
日期控件应该既能选取, 同时也能直接输入, 数字控件一般采用直接输入的方式来实现。日期和数字控件都有特定的格式, 并且这种格式式可以采用正在表达式来验证的。 数字和日期控件应该引导用户按到正确的格式进行输入, 限制不正确的格式输入。
具体实现为在服务端根据属性设置来生成正则表达式, 然后传递到客户端, 客户端根据正则表达式来引导用户输入。
资源嵌入
Web日期控件需要有图片和JavaScript文件的支持;一般的做法式将这些资源放在Web站点特定的目录, 但这样做比较麻烦。微软在Vs2005开始支持资源嵌入,因此, 我们需要将这些资源嵌入到Assembly, 以简化Web 日期数字控件额的部署。
多语言支持
数字和日期的表达形式一般与特定的语言文化联系在一起,因此, 数字和日期控件应该支持多语言。多语言的支持可以考虑如下三种形式, 一是直接指定显示的格式,这样比较简单, 适合于只需要在一种语言文化的环境下使用。 二是根据客户端的的语言文化来决定日期和数字的格式, 这样做比较符合用户的使用习惯。 还有就是根据服务器当前线程的语言文化, 这样做的好处是支持多语言切换。
强类型的值属性
TextBox 只有Text属性, 根据Text属性可以推算出数字和日期的值 , 但这需要额外的代码, 因此, 服务器控件应该有自己的强类型的值属性; 因为现在Linq已经开始流行, 因此支持Nullable的值类型也就很有必要了。
Web DateBox还应该支持日期时间格式。 虽然日期时间格式不是经常需要, 但作为一个通用的控件, 还是应该支持的。
1: 支持日期控件的图片, Java Script , CSS等文件全部与DLL一起打包, 因此, 使用本控件库时, 只需要简单的添加引用, 然后就可以从工具箱上拖到Web Form就可以了。
2:数字控件改善了对齐,ClipBoard访问功能
3:全面支持Nullable()属性
4:日期控件不仅支持日期, 同时也支持日期时间格式, 所有辅助文件全家打包到DLL, 支持多种日期格式,
5: 日期控件使用Layer技术, 选取日期时不是弹出一个新的小Page, 而是弹出一个Layer, 与页式日期控件相比,极大的改善了用户友好性。
6: 数字控件采用在服务端自动生成正则表示式的形式
这两个小控件, 能够极大的改善Web application 的开发速度, 同时提供了very cool的用户体验
下载地址 http://www.bluetechchina.com/ResourceCenter/DotNetCodingControls2.0.Zip
g
posted @ 2008-04-28 08:55 堂吉柯德 阅读(2011) 评论(3) 编辑
posted @ 2008-04-28 08:51 堂吉柯德 阅读(425) 评论(1) 编辑
2007年7月3日 #
posted @ 2007-07-03 17:25 堂吉柯德 阅读(545) 评论(2) 编辑
posted @ 2007-07-03 17:23 堂吉柯德 阅读(155) 评论(0) 编辑
posted @ 2007-07-03 17:21 堂吉柯德 阅读(120) 评论(0) 编辑
posted @ 2007-07-03 17:17 堂吉柯德 阅读(101) 评论(0) 编辑
不需要安装windows服务,
不需要对原有的程序代码做任何修改
支持部分更新下载
支持文件压缩
支持安全传输下载
请访问湛蓝科技主网站
posted @ 2007-07-03 17:12 堂吉柯德 阅读(371) 评论(0) 编辑