C# - 消息框 - 资源和换行符中的消息本地化

本文关键字:消息 本地化 换行符 资源 | 更新日期: 2023-09-27 17:57:10

我想显示带有带换行符的资源字符串的MessageBox(WinForms)。

没有资源的示例(WORKS):

string someMsg = "Message. Details:'n" + someDetails;
MessageBox.Show(someMsg);

结果:

消息。详:

以下是一些详细信息

当我移动字符串"消息。详细信息:'"到资源:

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

结果:

消息。详细信息:'以下是一些详细信息

当我将带有"'"的字符串移动到资源时,MessageBox.Show() 停止将其解释为换行符。

编辑:我正在考虑:someMsg.Replace(@''',Environment.NewLine);但是对于这么简单的事情来说,它仍然很烦人。

C# - 消息框 - 资源和换行符中的消息本地化

如果将其添加到资源中,则不会将'作为转义字符只需在记事本中打开您的资源文件即可查看此内容,并在XML文件(resx)中获取

在记事本中用新行键入数据。复制并粘贴到资源编辑器中

编辑:

将数据键入/粘贴到资源编辑器 UI 中,选择 ' 并将其替换为实际换行符,并带有 Shift-Enter

你可以做这样的事情(只要你的不是.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());

但是,这将影响应用程序中的所有字符串(命名空间范围)

这是一个肮脏的修复,但这是一个快速修复。

就个人而言,我只会一直修复我的逻辑,而不是做上面这样的事情。

也许你可以打开resx文件作为代码,并直接在.XML

由于转义字符,它们在阅读时可能会迷路,也许可以尝试使用''

一个简单的解决方案是将"占位符"存储在资源字符串中。对于 instane,此字符串存储在 *.resx 中的"消息详细信息"键:"消息。详情:{0}{1}"。然后,在您的代码中,像这样使用它:

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

如您所见,这里的优势是可移植性。