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);但是对于这么简单的事情来说,它仍然很烦人。
如果将其添加到资源中,则不会将'作为转义字符只需在记事本中打开您的资源文件即可查看此内容,并在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"));
如您所见,这里的优势是可移植性。