C # - MessageBox - локализация сообщений в ресурсах и разрывы строк - PullRequest
8 голосов
/ 20 мая 2011

Я хотел бы показать MessageBox (WinForms) со строкой из ресурсов с разрывами строк.

пример без Ресурсы (РАБОТЫ):

string someMsg = "Message. Details:\n" + someDetails;

MessageBox.Show(someMsg);

Результат:

Сообщение.Детали:

вот некоторые подробности

Когда я перемещаю строку "Сообщение. Детали: \ n" в Ресурсы:

string someMsg = GlobalStrings.MsgBoxJustTest + someDetails;
MessageBox.Show(someMsg);

Результат:

Сообщение.Детали: \ n есть некоторые детали

Когда я переместил строку с символом "\ n" в ресурсы, MessageBox.Show () перестал интерпретировать ее как символ новой строки.

Редактировать: Я думаю о: someMsg.Replace (@ '\ n', Environment.NewLine);но это все еще довольно раздражает для такой простой вещи.

Ответы [ 4 ]

11 голосов
/ 20 мая 2011

если вы добавите это к ресурсам, он не воспринимает \ n как escape-символ Просто откройте файл ресурсов в блокноте, чтобы увидеть это, и измените его в файле XML (resx)

или

Введите свои данные в блокноте с новой строкой. Скопируйте это и вставьте в ваш редактор ресурсов

редактировать:

или

Введите / вставьте свои данные в пользовательский интерфейс редактора ресурсов, выберите \ n и замените его фактическим переводом строки на Shift-Enter.

1 голос
/ 20 мая 2011

Вы можете сделать что-то вроде этого (если ваш не .net 2.0):

public static class StringExt
{
  public static String FixNewLines(this String str)
  {
    return str.Replace(@'\n',Environment.NewLine);
  }
}

А затем:

string someMsg = GlobalStrings.MsgBoxJustTest + someDetails;
MessageBox.Show(someMsg.FixNewLines());

Однако этоповлияет на ALL строки в вашем приложении (область пространства имен)

Это грязное исправление, но это быстрое исправление.

Лично я бы просто исправил свою логикупуть, а не делать что-то подобное выше.

0 голосов
/ 20 мая 2011

Одним из простых решений является хранение «заполнителей» в строках ресурса.Например, эта строка хранится в * .resx под ключом «MessageDetails»: «Сообщение. Подробности: {0} {1}».Затем в своем коде используйте его следующим образом:

MessageBox.Show (String.Format (GlobalStrings.MessageDetails, Environment.NewLine, @ "The message"));

Преимущество здесьэто мобильность, как вы можете видеть.

0 голосов
/ 20 мая 2011

Может быть, вы можете открыть файл resx как код и добавить разрывы строк непосредственно в XML

ИЛИ

Возможно, они теряются при чтении из-за escape-символа, возможно, попробуйте использовать \\

...