Common Library 之 ResourceProvider 多语言实现

by Daniel 19. August 2009 13:33

这个功能相信大家都早已知道。

1. 在在web.config定义特定的culture和uiCulture, 如果应用自定义resource prodiver的话, 加上resourceProviderFactoryType的设置:

如:

<globalization culture="en-us" uiCulture="en-us" resourceProviderFactoryType="MTRC.IRMIS.Common.ResourceProvider.DBResourceProviderFactory, IRMIS.Common "/>

culture和uiCulture也可以设置成auto, 这样就会取浏览器首选区域设定, MTRC.IRMIS.Common.ResourceProvider.DBResourceProviderFactory为provider factory类的命名空间加上类名, IRMIS.Common 则为dll的名字。

2. 运行中更改语言类别。对浏览器首选语言区域的检测是在页面什么周期早期, 可以在basepage基类中overirde InitializeCulture, 并且修改Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture。 如:

 

protected override void InitializeCulture()

    {

        string language = string.Empty;

        if (Session["lang"] != null)

        {

            language = Session["lang"].ToString();

        }

        if (!String.IsNullOrEmpty(language) && (language != "Auto"))

        {

            Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);

        }

    }

3. 可以在后台也可以在页面上直接调用资源

- 后台方法调用: GetLocalResourceObject 或 GetGlobalResourceObject, 不多说, 相信大家都知道

- 直接在页面有两种方法: 隐式和显式, 下面简单说说他们俩的区别。

a. 调用方法不同(废话, 真是的)

显示表达式:

调用全局资源 <asp:Literal id="Literal1" Text="<%$ Resources:riskCommon, ltrRiskStatus %>" runat="server"></asp:Literal>, 其中riskCommon是resource type字段, ltrRiskStatus是resource key

调用本地资源<asp:Literal ID="ltrUserName" runat="server" Text="<%$ Resources:ltrUserName %>"></asp:Literal>

隐式表达式:

调用本地资源<asp:Localize runat="server" Text="Deafult value" meta:resourcekey="lblProviderType"></asp:Localize>

b. 隐式表达式只可以调用本地资源

c. 隐式表达式存储值方式不一样, 在database里面如lblProviderType.text是Text属性的resource key。当然也可以配置其他属性, 如Visible的resource key 是lblProviderType.Visible

d. 隐式表达式是通过resourcereader去取资源的, 也就是说会一次把该resource type下的所有资源一次拿出来, 更有利于性能。而显式表达式是一条一条取的。(通过验证, 隐式表达式还是会一个一个跑一次)

e. 隐式表达式通过resource provider取不到值时会用默认值, 如上例中的Text="Default value", 而显式表达式会有编译错误(有点烦)。

注意:如果只是为了显示值,请使用控件<asp:Localize .., 上面有例子。

请大家指出不同意见和补充不全的。

 

Tags:

Common Library

Comments

8/19/2009 3:30:04 PM #

yangxi

更改 CurrentUICulture  就可以了,不要乱改 CurrentCulture !!

yangxi | Reply

8/19/2009 3:36:53 PM #

秘密

<table><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr><tr><td></td></tr></table>

秘密 | Reply

9/22/2009 1:20:49 PM #

路过

不现实,每个lable都要从后面Resources读出来。并且不能更改页面布局。

路过 | Reply

Add comment


(Will show your Gravatar icon)

biuquote
  • Comment
  • Preview
Loading



Copyright © 2009 APJ Software

最新评论

Comment RSS

公告

欢迎使用APJ Blog!

日历

<<  September 2010  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar