首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地化。扩展ASP.NET Resx资源提供程序

本地化。扩展ASP.NET Resx资源提供程序
EN

Stack Overflow用户
提问于 2012-07-05 08:59:23
回答 2查看 5.5K关注 0票数 4

对于我的网站,我有一个用于本地化目的的自定义资源提供程序(本地化字符串存储在数据库中)。它工作得很好,但我希望它与默认的Resx资源提供程序一起工作:在resx资源中查找本地化字符串,如果不存在,则从数据库中拉出它。

但是看起来,只要我将IIS全球化设置更改为使用我自己的资源提供程序工厂,那么默认的resx资源提供程序工厂就会被忽略。

我想解决方案是扩展我自己的资源提供程序,但是我不知道如何从我的资源提供程序内部引用resx资源。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-05 09:15:24

编辑

我下面的答案是错误的,正如评论中指出的那样。您可以通过使用反射获取ResXResourceProviderFactory,如下所示。

代码语言:javascript
复制
IResourceProvider resxProvider;
string typeName = "System.Web.Compilation.ResXResourceProviderFactory, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";
ResourceProviderFactory factory = (ResourceProviderFactory)Activator.CreateInstance(Type.GetType(typeName));
resxProvider = factory.CreateGlobalResourceProvider(classKey);

(获取本地资源提供程序的方法与此类似。)

然后,要获取资源,只需调用GetObject

代码语言:javascript
复制
object resource = p.GetObject("ResourceKey", new System.Globalization.CultureInfo("en"));

您可以使用GetGlobalResourceObjectGetLocalResourceObject方法( HttpContext类的一部分)在自定义本地化类中处理.ResX文件。

例如,要从"MyResxFile.resx“(在*App_GlobalResources*下)获取一个名为"ResourceKey”的资源,对于当前区域性,您可以使用以下命令:

代码语言:javascript
复制
HttpContext.GetGlobalResourceObject(
    "MyResxFile", 
    "ResourceKey", 
    System.Threading.Thread.CurrentThread.CurrentCulture
);
票数 4
EN

Stack Overflow用户

发布于 2012-07-06 03:45:56

因为隐式本地化表达式(meta:resourcekey)没有本地化,所以用默认的resX资源提供程序扩展自定义资源提供程序看起来并不能完全解决这个问题。

我发现here可能的解决方案是使用自定义的ResourceExpressionBuilder:

对于所有资源都将存储在备用位置,并且您不打算分别利用位于App_LocalResources和App_GlobalResources中的资源的情况,

配置自定义提供程序非常有用。如果您想要支持本地和全局资源的标准实现(默认提供程序),同时还可以选择从另一个源(自定义提供程序)提取一些资源,该怎么办?可以通过实现以自定义资源提供程序为目标的自定义表达式来实现此目的。

这将允许使用resX资源提供程序进行隐式和显式本地化,以及自定义资源提供程序的自定义表达式:

代码语言:javascript
复制
<%-- Local ResX --%>
<asp:Localize ID="locLocal" runat="server" Text="DefaultLocal" meta:resourcekey="locLocal" />
<%-- Global ResX --%>
<asp:Localize ID="locGlobal" runat="server" Text="<%$ Resources:GlobalResourceStrings, locGlobal %>" />
<%-- Custom Resource Provider --%>
<asp:Localize ID="locCust" runat="server" Text="<%$ ExternalResources:MyResources|CustomResourceStrings, locCust %>" meta:localize="false" />

或者在代码中为:

代码语言:javascript
复制
string s = (string)ExternalResourceExpressionBuilder.GetGlobalResourceObject("MyResources|CustomResourceStrings", "locCust");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11336763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档