ResourceProvider 多语言实现

来源:互联网 发布:mac版农行支付宝 编辑:程序博客网 时间:2024/06/06 13:02

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

 如:

 <globalization culture="en-us" uiCulture="en-us" resourceProviderFactoryType="DBResourceProviderFactory, Common "/>
 
 culture和uiCulture也可以设置成auto, 这样就会取浏览器首选区域设定, DBResourceProviderFactory为provider factory类的命名空间加上类名, Common 则为dll的名字。代码就不作详解!

 

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

 

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 .., 上面有例子。

 

原创粉丝点击