2011-05-02 79 views
1

当前我正在开发一个ASP.net webforms项目,我想向用户指出当前页面上的哪些元素包含本地化资源。标记包含由ASP资源提供者提供的内容的HTML元素

为了确定哪些HTML元素包含哪些本地化资源。我想标记所有呈现的HTML元素,它们在呈现页面时从ResourceProvider中检索到了一个资源。从而创建HTML元素和使用的资源之间的映射。

标记将通过添加一个data-localized属性到html元素来完成。该属性将包含使用的资源标识符(即resx文件名和资源键),然后当浏览器显示页面时,javascript将使用该信息做任何事情。

到目前为止,我已经用自己的提供程序替换了默认的资源提供程序,该提供程序从数据库中检索资源而不是常规的.resx文件(如this文章中所述)。这给我关于所有使用的资源的信息,并通过在HttpContext中记录这些资源,我知道当前页面使用的所有资源。

现在进行映射,因为本地化资源并不总是必须在HTML元素内发生(例如,它可能只是一个由Literal控件产生的字符串)。我已经引入了一个新的CompositeControl,它包含一个包含本地化资源的部分,其中包含<div data-localized=""> </div>

我的问题:如何将包装与其子项使用的资源进行映射?

回答

1

由于您打算使用JavaScript后处理数据,因此您可能会想到将前缀和分隔符的形式添加到实际翻译的文本中,例如“示例文本”将变为“## strings.resx ## login.form.sample.text ##示例文本“。
然后,您的客户端脚本将查找##分隔符并从页面中删除它们(或做任何您想要的)。

我知道这不是你要求的,但我相信它更简单,更容易实现。

+0

我明白了,我已经想到了类似的解决方案。我曾希望有一个“更干净”的方式来实现这一点。我尝试过几种策略,但没有成功。问题在于资源在渲染过程的许多不同阶段被访问,取决于它们是如何(以及在​​哪里)被声明的。谢谢你回答我的问题。 – mkl 2011-05-04 09:29:32