zoukankan      html  css  js  c++  java
  • 资源:全球化与本地化(二)——指定语言语种

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

  • 相关阅读:
    Excel与Google Sheets中实现线性规划求解
    Optaplanner终于支持多线程并行运行
    【译】Optaplanner开发手册本地化: (0)
    多工序、多机台(产线)环境下的排程要点
    设计Optaplanner下实时规划服务的失败经历
    Optaplanner规划引擎的工作原理及简单示例(2)
    vim 分屏
    vim autocmd
    irun vcs option
    记录
  • 原文地址:https://www.cnblogs.com/xpnew/p/1362354.html
Copyright © 2011-2022 走看看