Мне лично нравится идея хранить встроенные теги в файле ресурсов. Однако я делаю это немного по-другому. Я храню очень простые теги, такие как <span class='emphasis'>dog</span>
, и затем я использую CSS, чтобы соответствующим образом стилизовать теги. Теперь вместо «передачи» тега в качестве параметра я просто соответствующим образом стилизую правило span.emphasis
в своем CSS. Изменения переносятся на все языки.
Опция Sexier:
Еще один вариант, который мне очень понравился, - использовать язык «удобочитаемой разметки», такой как собственный * StackOverflow MarkdownSharp . Таким образом, вы не сохраняете HTML в файле ресурсов, только текст уценки. Таким образом, в вашем ресурсе у вас будет **dog**
, а затем он будет шунтирован через уценку в представлении (я создал для этого помощника (Использование: Html.Markdown(string text)
). Теперь вы не храните теги, вы храните общий понятный человеку язык разметки. Источник markdownsharp - это один файл .CS, который легко изменить. Таким образом, вы всегда можете изменить способ рендеринга конечного HTML. Это дает вам полный контроль над всеми вашими ресурсами без сохранения HTML и без дублирования представлений или куски HTML.
EDIT
Это также дает вам контроль над кодировкой. Вы можете легко убедиться, что содержимое ваших файлов ресурсов не содержит действительный HTML. Синтаксис уценки (как вы знаете из использования переполнения стека) не содержит тегов HTML и, следовательно, может быть закодирован без вреда. Затем вы просто используете свой помощник для преобразования синтаксиса Markdown в действительный HTML.
РЕДАКТИРОВАТЬ # 2
В уценке есть одна ошибка, которую мне пришлось исправить самому. Все, что обнаруживает разметка, должно отображаться как блок кода, который будет закодирован в формате HTML. Это проблема, если вы уже закодировали HTML весь контент, передаваемый в уценку, поскольку все в кодовых блоках будет по существу перекодировано, что превращает >
в &gt;
и полностью запутывает текст в кодовых блоках. Чтобы исправить это, я изменил файл markdown.cs, добавив в него логический параметр, который останавливает уценку при кодировании текста внутри блоков кода. См. Эту проблему для получения исправленного файла .cs, который я добавил к проблемам проекта MarkdownSharp.
РЕДАКТИРОВАТЬ # 3 - Пример помощника HTML
public static class HtmlHelpers
{
public static MvcHtmlString Markdown(this HtmlHelper helper, string text)
{
var markdown = new MarkdownSharp.Markdown
{
AutoHyperlink = true,
EncodeCodeBlocks = false, // This option is my custom option to stop the code block encoding problem.
LinkEmails = true,
EncodeProblemUrlCharacters = true
};
string html = markdown.Transform(markdownText);
return MvcHtmlString.Create(html);
}
}