代码之家  ›  专栏  ›  技术社区  ›  Peter

在资源文件中使用HTML

  •  34
  • Peter  · 技术社区  · 15 年前

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

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

    如果没有,最好的方法是什么?

    8 回复  |  直到 9 年前
        1
  •  68
  •   Marek Grzenkowicz    12 年前

    你可以使用 @Html.Raw 方法,例如 @Html.Raw(STRING FROM RESX FILE HERE)

        2
  •  12
  •   Guido Bouman    9 年前

    当我面对同样的问题时,我决定不在参考资料中直接使用段落。用简单的新行分隔文本块(如果没有弄错,请按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 () %>
    

    我认为这比将标记标记放入原则上不属于它们的文本资源中更干净。

        3
  •  5
  •   Wim ten Brink    15 年前

    是和否。资源是存储本地化文本的好地方,基本上这将允许您将整个资源发送给某个翻译机构,该机构将为您进行所有翻译。所以,这是一个优势。 但是,它也增加了错误的可能性,因为您可能会忘记对HTML进行编码或解码。.resx文件是一个XML文件,因此需要将其编码存储在资源中。(幸运的是,它会自动编码。)当您再次检索它时,它会自动再次解码。但是,如果将文本传递给其他函数,则有可能再次对其进行编码,从而导致<b>粗体</b>而不是 大胆的 … 所以你需要一些额外的测试。这是你能做到的。

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

        4
  •  4
  •   LPL user462990    13 年前

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

    例如

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

    根据你想如何使用它,你可能需要剥去 <![CDATA[ ]]> 在你的应用程序中。

    这种方法允许您在resx文件中包含任何HTML标记。我这样做是为了存储格式化的文本消息,以便在jquery用户界面对话框中从ASP.NET MVC应用程序中的各种视图中显示这些消息。

        5
  •  1
  •   UpTheCreek    15 年前

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

    有时语言之间的语法差异会使这变得困难。有时,您希望存储大量基于文本的资源(足够大,它们必须包含P标记之类的内容)。这取决于你在做什么。

        6
  •  1
  •   LPL user462990    13 年前

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

    UrlDecoder解码假定在 x-www-form-urlencoded mime内容类型'+'将转换为 空格、“%”和后面两个十六进制数字字符转换为 等效字节值。所有其他字符都将通过 未修改的

    例如“A+B+C%24%25”->“A B C$%”。

        7
  •  1
  •   t_plusplus    9 年前

    您也可以在Designer中打开您的资源文件,然后根据需要简单地键入HTML和文本。

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

    不过,@tony bennett的解决方案非常有效。

    也可以这样操作;此处的特殊字符用于打开/关闭<和>的三角括号:

    are you targeting to &lt;b&gt;sustain&lt;/b&gt; the Mark they achieved
    
        8
  •  0
  •   Peter Mortensen John Conde    12 年前

    是的。

    您可以使用文本到HTML的转换器,但是由于文本包含的信息比HTML少得多,所以您将受到限制。