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动态设置。

  • 相关阅读:
    HDU 2888 Check Corners (模板题)【二维RMQ】
    POJ 3264 Balanced Lineup(模板题)【RMQ】
    poj 3368 Frequent values(经典)【RMQ】
    SPOJ RPLN (模板题)(ST算法)【RMQ】
    UVA 796 Critical Links(模板题)(无向图求桥)
    UVA 315 Network (模板题)(无向图求割点)
    POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】
    poj 3067 Japan 【树状数组】
    POJ 2481 Cows 【树状数组】
    POJ 1195 Mobile phones【二维树状数组】
  • 原文地址:https://www.cnblogs.com/bighuiwolf/p/1867166.html
Copyright © 2011-2022 走看看