如何从ASP.NET标记中获取资源字符串?

8

你好,我有一个名为X.Common.DLL的程序集。它包含了一些用于多语言应用的资源文件,比如Language.resx,Language.en-US.resx等等。

我有一个Web应用程序,其中包含了上述dll作为引用...

那么我该如何在Web应用程序的标记侧使用这些资源文件呢?

Text="<%$ Resources:Class, ResourceKey %>"是无效的,因为“Class”名称在另一个程序集中...


你是否拥有DLL的源代码?如果是这样,为什么不在源代码中创建一个轻量级API,例如将字符串公开为公共属性?然后你可以从你的HTML中调用它。 - RPM1984
首先,我不想触碰 Web 应用程序的代码库......如果按照您说的做,我还必须处理本地化的事情......但是,如果我能成功做到这一点,.NET 框架将为我处理它......顺便说一句,非常感谢您的回复... - Arda
2个回答

3
你可以轻松地创建一个包装类,做类似这样的事情。
public class ResourceWrapper
{
     private ResourceManager resourceManager;

     public ResourceWrapper()
     {
         resourceManager = new ResourceManager("Namespace.Common", Assembly.Load("x.common"))
     }

     public string String(string resourceKey)
     {
         return ResourceManager.GetString(resourceKey);
     }
 }     

有时候找到new ResourceManager(...)的第一个参数的正确名称可能会有些棘手。为了让自己更容易,你可以这样调用:

Assembly.Load("x.common").GetManifestResourceNames() and check the returned results.

如果您创建一个静态包装器,您可以将资源调用代码简化为以下内容:
<%= Resource.String("MyResourceKey") %>

0

在web.config中引用其他程序集,以便在Web表单中公开其内容。 http://msdn.microsoft.com/en-us/library/ms164642.aspx

编辑:由于评论下的原因,以下是更详细的答案: 您应该像这样完成webconfig的页面/命名空间部分:

<pages>
    <namespaces>
        ...
        <add namespace="My.Fully.Qualified.Namespace"/>
    </namespaces>   
</pages>

当然,提供命名空间的程序集也应该被引用(项目引用、web.config的部分)。
然后你就可以写像"<%= MyResx.MyEntry %>"这样的东西了。

你的链接是关于如何在ASP.NET页面/控件中自动导入命名空间的。你需要做的是在编译部分添加程序集。http://msdn.microsoft.com/en-us/library/s10awwz0.aspx - Pauli Østerø
这就是为什么发布只链接到其他网站的答案没有帮助的原因。这个答案(或者也许是第一个评论)本来可以回答我的问题,但由于链接已经失效,所以毫无用处。 - Richard Marskell - Drackir
同意你的观点,我已编辑了自己的答案。没有重新阅读整个问题,但我认为这就是预期的答案。 - AFract

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接