在资源文件中使用HTML

Pet*_*ter 35 html asp.net asp.net-mvc resources

我正在开发一个标准的小型ASP.NET MVC网站,该网站将使用ASP.NET资源文件进行多语言编写.

我的问题是关于资源文件.看看你是否有应该在段落中显示的文本块,是否适合<p>在资源文件文本中添加标签?

如果没有,那么处理它的最佳方法是什么?

小智 71

您可以@Html.Raw在视图中使用该方法,例如@Html.Raw(STRING FROM RESX FILE HERE)


小智 12

当我遇到同样的问题时,我决定不直接在资源中使用段落.用简单的新行分隔文本块(如果我没弄错的话,按Shift + Enter键).然后创建一个帮助器方法将块包装成段落.

using System;
using System.Text;
using System.Web;

namespace MyHtmlExtensions
{
  public static class ResourceHelpers
  {
    public static IHtmlString WrapTextBlockIntoParagraphs(this string s)
    {
      if (s == null) return new HtmlString(string.Empty);

      var blocks = s.Split(new string[] { "\r\n", "\n" },
                            StringSplitOptions.RemoveEmptyEntries);

      StringBuilder htmlParagraphs = new StringBuilder();
      foreach (string block in blocks)
      {
        htmlParagraphs.Append("<p>" + block + "</p>");
      }

      return new HtmlString(htmlParagraphs.ToString());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中导入扩展方法命名空间:

<%@ Import Namespace="MyHtmlExtensions" %>
Run Code Online (Sandbox Code Playgroud)

并应用它:

<%= Resources.Texts.HelloWorld.WrapTextBlockIntoParagraphs () %>
Run Code Online (Sandbox Code Playgroud)

我认为这比将标记标记放入原则上不属于的文本资源更简洁.


Wim*_*ink 5

是的,不是.资源是存储本地化文本的好地方,基本上这将允许您将整个资源发送给将为您执行所有翻译的翻译机构.所以,这是一个加号.但是,它还会增加错误的可能性,因为您可能忘记对HTML进行编码或解码..resx文件是一个xml文件,因此需要将其编码存储在资源中.(幸运的是,它会自动对其进行编码.)当您再次检索它时,它将再次自动解码.但是,如果您将文本传递给其他函数,则存在再次编码的风险,导致<b>粗体</ b>而不是粗体 ......所以您需要进行一些额外的测试.这是你可以管理的东西.

但最重要的问题可能是进行翻译的人.如果他们只是翻译.resx文件,他们会看到编码的字符串.如果他们使用某些东西来使资源更具可读性,那么这可以解决.只要他们不会自己翻译标签.他们可能会混淆将要翻译的人.


小智 5

您可以将resx值字段的数据包装在CDATA块中<![CDATA[ ]]>

例如

<![CDATA[My text in <b>bold</b>]]>
Run Code Online (Sandbox Code Playgroud)

根据您要使用它的方式,您可能必须在应用程序中删除<![CDATA[]]>

这种方法允许您在resx文件中包括任何html标记。我这样做是为了存储格式化的文本消息,这些消息将在asp.net mvc应用程序中的各种视图中显示在jquery-ui对话框中。


t_p*_*lus 5

您不妨在设计器中打开资源文件,然后根据需要输入 html 和文本。

例如:Resource Text <b>Data</b>

然而@Tony Bennett 的解决方案非常有效。

类似这样的东西也有效;这里的特殊字符用于打开/关闭 < 和 > 的三角括号:

are you targeting to &lt;b&gt;sustain&lt;/b&gt; the Mark they achieved
Run Code Online (Sandbox Code Playgroud)