资源:全球化与本地化(二)——指定语言语种

导读:有关资源的使用,我准备写一系列的博客,这是系列中的第二篇,(目前第一篇欠奉,前面写的那个应该是第三或者第四篇),在这篇文章里主要讨论的是,网站支持默认的的语言之外,用户指定语言语种。说白了就是修改 Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture

这里参考其它几篇文章,对于相应的作者,就不一一致谢了。参考的文章地址附后。

主要步骤:

第一:添加指定语言的按钮,指定值

    protected void Button3_Click(object sender, EventArgs e)
    {
        Profile.LanguagePreference = "zh-cn";//这里使用了web.config文件指定Profile节,相关设置在后面。
        Response.Redirect(Request.Url.AbsolutePath);//按下按钮时页面的语言已经指定了。除非是下一次加载才能显示。所以这里要重定向页面
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        Profile.LanguagePreference = "en-us";
        Response.Redirect(Request.Url.AbsolutePath);
    }

第二:根据指定值,处理页面语言,注意“Asp.net快速入门”上强调“值得注意的是,对 Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture 所做的更改需要在 InitializeCulture() 方法中进行,因为对首选浏览器语言的自动检测是在页生存期的早期发生的。 ”也就是说如果放在按钮事件处理函数或者放在Page_Load事件中,黄花菜都凉了。

我的代码:

     protected override void InitializeCulture()
    {
        //base.InitializeCulture();

        string CultureTag = Profile.GetPropertyValue("LanguagePreference").ToString();
        if (null != CultureTag && String.Empty != CultureTag.Trim() && "auto" != CultureTag)
        {
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(CultureTag);
        }

    }

QuickLee的代码:

    protected override void InitializeCulture()
    {
        string cultureTag = Context.Profile.GetPropertyValue("LanguagePreference").ToString();
        if (!string.IsNullOrEmpty(cultureTag) && !cultureTag.Equals("auto"))
        {
            //UICulture - 决定了采用哪一种本地化资源,也就是使用哪种语言
            //Culture - 决定各种数据类型是如何组织,如数字与日期
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureTag);
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureTag);
        }
    }

ASP.NET快速入门的代码:

    protected override void InitializeCulture()
    {
        // override virtual method InitializeCulture() to check if profile contains a user language setting
        string UserCulture = Profile.GetPropertyValue("PreferredCulture").ToString();
        if ( UserCulture != "")
        {
            // there is a user language setting in the profile: switch to it
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);
        }
    }
(为什么罗列这三组代码呢?实际上就是想保留下来几种处理string的方式。)

第三,修改web.config,添加Profile和anonymousIdentification。

Profile是“使用 ASP.NET 配置文件来配置用于管理用户配置文件值的参数。”,也就是针对站点用户提供的一些配置,在这里的作用是,提供了一个“LanguagePreference”变量,可以让访问站点的用户把语言选择保存到Profile之中。假如没有这个,就得保留到Session之中了。

anonymousIdentification是“针对应用程序授权配置匿名标识”,是针对匿名用户的选项,如果没有这一设置,就会出现异常在vs2005中提示“配置文件属性“LanguagePreference”允许匿名用户存储数据。这要求启用 AnonymousIdentification 功能。”

    <profile>
     <properties>
       <add name="LanguagePreference" type="string" defaultValue="auto" allowAnonymous="true"/>
     </properties>
   </profile>
   <anonymousIdentification enabled="true"/>

 

参考资源:

1、QuickLee的博客。他的博客里没有详细的说明,但是代码打开里面有注释。
cnblogs.com/lizhimin/archive/2007/04/23/724329.html

2、ASP.NET快速入门。这里面有资源的详细说明。

ASP.NET快速入门,是包含在vs 2005里面,不过默认情况下是没有安装的。

3、http://blog.csdn.net/shankaipingo/articles/1385223.aspx

 

posted @ 2008-12-25 15:21  柳城之城  阅读(565)  评论(1编辑  收藏  举报