zoukankan      html  css  js  c++  java
  • 多语言建议

    我在做涉及到多语言的程序时,发现一些现有程序中可以改进的地方,比如获取用户语言的方法,假如用目前的Language.GetCurrentLanguage()方法,而用户浏览器语言又是系统中不支持的时候,有些RealSearch的东西是搜不出来的,以下两条SQL只有语言参数不同,中文搜不出来,英文可以:

    SILCustom_Business_SearchForMatch

          @PageIndex = 1,

          @PageSize = 1,

          @Category = 0,

          @Keywords = '',

          @Scope = 'World',

          @CountryId = 0,

          @BclLanguage = 'zh-CN'

    SILCustom_Business_SearchForMatch

          @PageIndex = 1,

          @PageSize = 1,

          @Category = 0,

          @Keywords = '',

          @Scope = 'World',

          @CountryId = 0,

          @BclLanguage = 'en-US'

    我做了一些研究,做如下建议(如果有时间,我会做例子):

    多语言方案要满足以下需求:

    1.       不论在任何地方,均可方便的访问到当前上下文所需要的语言。

    现在的方案里,语言的获取操作是在BLL层,这导致Dal的访问必须提供语言参数(如AddBusinessCategoryManagerAssignExtistingBusinessActivityToMultiSelection方法),这不是一种优雅的设计。

    2.       尽最大可能找到与用户需求最接近的语言包,实在找不到的时候,提供默认语言,永远不会出异常。

    现在的Language类里,只取了客户端所支持的首选语言,并没有尽最大努力去找最匹配的语言,一旦首选语言是系统不支持的,将出异常。

    最佳作法是:

    1.       定义系统支持的语言列表,此列表指出目前系统所支持的语言,当用户语言不在此列表时,使用默认语言。

    2.       获取语言的方法是通过2个阶段:

    1)      初始化阶段:用Cookie[“UserLanguage”]保存用户所用语言。

             在Application_BeginRequest中,当Cookie[“UserLanguage”]不为空时,把它赋给Thread.CurrentThread.CurrentCulture Thread.CurrentThread.CurrentUICulture;

    Cookie[“UserLanguage”]为空时,需要把客户端支持的且系统也支持的语言赋给Cookie,方法是依次看Request.UserLanguages中所支持的语言,一旦发现有与系统支持的语言相匹配的语言,就将其设置到Cookie,如果找不到,就赋默认语言。同时页面上提供系统所支持语言的列表选项,用户可以自己设置需要查看的语言,选择后系统简单的把所选语言赋到Cookie并刷新页面。

    2)      在后续需要获取语言的时候,就用Thread.CurrentThread.CurrentCulture即可,无需传参数。

    3.       获取资源时,使用ResourceManager ,这个类会自动根据当前线程语言(CultureInfo.CurrentCulture Thread.CurrentThread.CurrentCulture)去找对应资源。在页面上可以用<%$ Resources:key %>语法显示的访问资源,或用meta:resourcekey="key"隐式的访问资源,在代码里可以用GetLocalResourceObjectGetGlobalResourceObjectResources.Class.Resource来访问资源。Web.config和页面都能定义使用的语言,页面的InitializeCulture()可以被重写来动态设置语言,不过最好的方法还是在Global.asax里的Application_BeginRequest动态设置。

  • 相关阅读:
    36.百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大中小马多少匹,共有多少组解?
    35.鸡兔同笼问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
    34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
    33.求1*2+2*3+3*4+……前n项的和
    32.求1+(1+2)+(1+2+3)+(1+2+3+4)+……的前n项的和
    31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
    vue-cli3 一直运行 /sockjs-node/info?t= 解决方案
    python pdf转word
    window django-https 证书
    Docker技术应用场景(转载)
  • 原文地址:https://www.cnblogs.com/bighuiwolf/p/1867166.html
Copyright © 2011-2022 走看看