Подтвердить что ты не робот

Использование HTML внутри файлов ресурсов

Я разрабатываю стандартный небольшой веб-сайт ASP.NET MVC, который будет сделан на многоязычном языке, используя ASP.NET.

Мой вопрос о файлах ресурсов. Посмотрите, есть ли у вас блок текста, который должен быть показан в параграфах, целесообразно ли добавлять теги <p> внутри вашего файла файла ресурсов?

Если нет, то какой был бы лучший способ справиться с этим?

4b9b3361

Ответ 1

Вы можете использовать метод @Html.Raw внутри вашего представления, например. @Html.Raw(STRING FROM RESX FILE HERE)

Ответ 2

Когда я столкнулся с тем же вопросом, я решил не иметь пунктов непосредственно в ресурсах. Отдельный текстовый блок с помощью простых новых строк (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

Да и нет. Ресурсы - хорошее место для хранения локализованного текста, и в основном это позволит вам отправить весь ресурс в какое-либо бюро переводов, которое сделает все переводы для вас. Итак, это плюс. Тем не менее, это также увеличивает вероятность ошибок, потому что вы можете забыть кодировать или декодировать HTML. Файл .resx представляет собой XML файл, поэтому его необходимо сохранить в ресурсе. (К счастью, он будет автоматически закодировать его.) Когда вы снова получите его, он будет автоматически декодирован. Однако, если вы передаете текст другим функциям, существует риск, что он будет закодирован снова, в результате чего <b> bold </b> вместо жирный... Поэтому вам потребуется дополнительное тестирование. Это то, что вы можете управлять.

Но большая проблема может быть для человека, который выполняет переводы. Если они просто переведут файл .resx, они будут видеть закодированные строки. Это можно решить, если они используют что-то, чтобы сделать ресурсы более читабельными. До тех пор, пока они не будут переводить сами теги. Они могут запутать людей, которые будут выполнять переводы.

Ответ 4

Вы можете обернуть данные для поля значения resx в блоке CDATA, <![CDATA[ ]]>.

например.

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

В зависимости от того, как вы хотите его использовать, вам, вероятно, придется отключить <![CDATA[ и ]]> в вашем приложении.

Этот подход позволяет включать любую разметку html в файл resx. Я делаю это для хранения форматированных текстовых сообщений, которые будут отображаться в диалоговом окне jquery-ui из различных представлений в приложении asp.net mvc.

Ответ 5

Я бы сказал, что этого следует избегать, но иногда это практически неизбежно. В идеале было бы лучше сохранить ваши ресурсы на уровне детализации, что позволит вам добавить разметку презентации для всех языков в соответствующей области приложения.

Иногда грамматические различия между языками затрудняют это. Иногда вы хотите хранить большие куски текстовых ресурсов (достаточно больших, чтобы они могли охватывать такие вещи, как теги p). Это немного зависит от того, что вы делаете.

Ответ 6

Использовать URLEncoder для хранения строки HTML в ресурсе; затем декодировать строку и использовать webview, а не конвертировать все теги HTML.

URLDecoder декодирует аргумент, который предполагается закодированным в x-www-form-urlencoded MIME-тип контента. '+' будет преобразован в пробел, '%' и два следующих шестнадцатеричных символа преобразуются в эквивалентное значение байта. Все остальные символы передаются неизмененной.

Например, "A + B + C% 24% 25" → "A B C $%".

Ответ 7

Вы также можете открыть свой файл ресурсов в дизайнере и просто набрать html и текст по своему усмотрению.

Например: Resource Text <b>Data</b>

Однако решение от @Tony Bennett отлично работает.

Также работает что-то подобное; специальные символы здесь используются для открытия/закрытия треугольных скобок < и > :

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

Ответ 8

Мы делаем.

Вы можете использовать конвертер text-to-HTML, но поскольку текст содержит гораздо меньше информации, чем HTML, вам будет запрещено.