【问题标题】:How to get resource strings from ASP.NET markup?如何从 ASP.NET 标记中获取资源字符串?
【发布时间】:2011-05-30 08:27:30
【问题描述】:

嗨 我有一个名为 X.Common.DLL 的程序集。有一些多语言应用程序的资源文件。比如说 Language.resx Language.en-US.resx....等等....

我有一个包含上述 dll 作为参考的 Web 应用程序...

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

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

【问题讨论】:

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

标签: c# asp.net resources globalization embedded-resource


【解决方案1】:

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

编辑:由于 cmets 下的更详细的答案: 您应该像这样完成 webconfig 的页面/命名空间部分:

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

当然也应该引用提供命名空间的程序集(项目引用,web.config 的部分)

那么你应该可以写出类似“

【讨论】:

  • 您的链接是如何在 asp.net 页面/控件中自动导入命名空间。您需要的是在编译部分添加程序集msdn.microsoft.com/en-us/library/s10awwz0.aspx
  • 这就是为什么发布仅链接到另一个站点的答案没有帮助的原因。这个答案(或者可能是第一条评论)本可以回答我的问题,但是由于链接已失效,因此没用。
  • 同意你的观点,我已经编辑了自己的答案。没有重新阅读整个问题,但我认为这是预期的答案。
【解决方案2】:

你可以很容易地创建一个包装类来做这样的事情

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") %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2014-05-11
    相关资源
    最近更新 更多