Возврат каретки / перевод строки в файле ресурсов .Net (App_GlobalResources)


94

Я храню несколько текстов в App_GlobalResources.resxфайле.

Тексты должны быть многострочными, и мне нужно, чтобы они содержали переводы строк. Однако, когда я читаю содержимое, все переводы строки пропадают ( \r\nпечатаются, а не как CRLF 10 13управляющий символ).

Я знаю, что могу обойти это, повторно заменив \r\n(или что-то еще в этом отношении) обратно на CRLF, когда я читаю содержимое, но мне было интересно, почему эти явно ориентированные на текст файлы resx игнорируют управляющие символы - а CRLF в некотором роде важен - и если кто-нибудь знает, есть ли настройка или что-то, что позволило бы этому работать естественным образом.

Ответы:


161

Я использовал VB.NET Express Edition, чтобы проверить это.

В редакторе ресурсов (где вы можете указать имя ресурса и содержимое строки) поместите содержимое строки, разделенное знаком Shift+Enter .

Допустим, вы хотите ввести

hello  
world

Введите "привет" и нажмите Shift+Enter и «мир».

Если вы посмотрите на файл Resources.Resx (который является файлом xml), вы увидите, что он создает узел с атрибутом xml:space="preserve" .

2-й вариант

Кроме того, вы можете вручную отредактировать Resources.resx и изменить содержимое, чтобы оно находилось в разделе CDATA.

Предположим, что у вас есть строка с именем «example». Найдите его в Resources.resx и измените содержимое, чтобы внутри него был раздел CDATA, а не просто значение.

например

<data name="example">
<![CDATA[
hello
world
1
2   3
4
]]>  </data>

3
Я нашел этот ответ, ища способ вставки \tвкладок. Мне фактически пришлось зайти в настройки Visual Studio для вкладок в файлах xml и отключить параметр «вкладки как пробелы» (где вместо этого он заменяет символы табуляции некоторым количеством пробелов), чтобы я мог получить буквальный символ табуляции в своей строке.
Jon O

Потрясающе ... не знал, что это возможно! :)
Лениэль Маккаферри 01

Лучше поздно, чем никогда ... После того, как я решил, что \ n правильный путь. Всего 50 изменений!
Andez 02

Спас мой день. Спасибо!!
xyzWty

35

Используйте Shift+, Enterчтобы вставить новую строку.


4
кто бы мог подумать. пробовал ctrl + enter, alt + enter. согласованность МС!
Illuminati

18

При использовании интерфейса дизайнера resx

  • Если вы действительно вводите текст в файл resx, вы должны использовать

    Shift+Enter

    как отмечено в других ответах.

  • Если вы вставляете текст в resx - Visual Studio вставит текст в том же формате, в котором он уже есть (включая разрывы строк / многострочный).

При открытии файла resx в формате XML

(найдите файл resx с помощью поиска и замены .. когда вы щелкнете файл на панели «результаты поиска», VS откроет файл resx в XML)

Здесь вы можете добавлять текст, как хотите (в тегах значений), при этом форматирование будет сохранено.


17

Что ж, в моей ситуации сработало использование такого <br>тега:

A text with a line break <br> and this goes in the second line.

Здесь есть сообщение с дополнительной информацией: Размещение разрыва строки в файле ресурсов resx

Если вы используете механизм просмотра Razor с ASP.NET MVC, вам необходимо использовать:

@Html.Raw(ResourceFile.ResourceString)

так что он печатает <br>как HTML.


10
Это будет работать, если ваша строка ресурса предназначена для использования как HTML. Но если строка будет использоваться не в формате HTML (например, как строка для всплывающей подсказки или диалогового окна сообщения об ошибке в настольном приложении), вы просто получите <br> в своей строке.
Питер Мейер

0

Можно отредактировать *.resxфайл с помощью текстового редактора, чтобы добавить разрывы строк.

Вы можете сделать это даже в Visual Studio:

  • Щелкните правой кнопкой мыши файл ресурсов
  • Нажмите для Open with ...
  • Выбрать XML (Text) Editor with Encoding
  • Нажмите OK
  • Щелкните еще OKраз, чтобы выбрать кодировку (автоматическое определение)
  • Найдите название (ключ) вашего текста (например, "MY_TEXT")
  • Отредактируйте текст внутри <value>тега. Для перехода на новую строку просто нажмите Enter. Примечание. Удалите начальные пробелы после переноса строки. В противном случае они тоже вставляются.

Протестировано с Visual Studio 2017.

Пример:

  <data name="MY_TEXT" xml:space="preserve">
    <value>Line 1
Line 2
Line 3</value>
  </data>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.