在资源文件中使用HTML

时间:2009-09-29 07:27:47

标签: asp.net html asp.net-mvc resources

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

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

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

8 个答案:

答案 0 :(得分:69)

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

答案 1 :(得分: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());
    }
  }
}

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

<%@ Import Namespace="MyHtmlExtensions" %>

并应用它:

<%= Resources.Texts.HelloWorld.WrapTextBlockIntoParagraphs () %>

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:5)

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

e.g。

<![CDATA[My text in <b>bold</b>]]>

根据您的使用方式,您可能需要剥离应用中的<![CDATA[]]>

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

答案 4 :(得分:1)

我想说应该避免这种情况,但有时这实际上是不可避免的。理想情况下,最好将您的资源存储在一个粒度级别,以便您可以在应用程序的相应区域中为所有语言添加共同的表示标记。

有时语言之间的语法差异使这很困难。有时您希望存储大量基于文本的资源(足够大,以至于它们必须包含诸如p标记之类的东西)。这取决于你在做什么。

答案 5 :(得分:1)

使用URLEncoder将HTML字符串存储在资源中;然后解码字符串并使用webview而不是转换所有HTML标记。

  

URLDecoder解码假定在其中编码的参数   x-www-form-urlencoded MIME内容类型。 '+'将转换为   空格,'%'和后面的两位十六进制数字转换为   等效字节值。所有其他字符都通过   修改。

     

例如“A + B + C%24%25” - &gt; “A B C $%”。

答案 6 :(得分:1)

您也可以在设计器中打开资源文件,只需输入html和文本即可。

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

然而@Tony Bennett的解决方案完美无缺......

这样的东西也有效;这里的特殊字符用于打开/关闭&lt;和&gt;:

are you targeting to &lt;b&gt;sustain&lt;/b&gt; the Mark they achieved

答案 7 :(得分:0)

我们这样做。

您可以使用文本到HTML转换器,但由于文本包含的信息远少于HTML,因此您将受到限制。