2011-05-20 77 views
7

我想用帶有換行符的資源字符串來顯示MessageBox(WinForms)。C# - MessageBox - 消息在資源和行中的本地化中斷

例如而不資源(工程):

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); 但它對於如此簡單的事情仍然非常惱人。

+0

相關但不重複:http://stackoverflow.com/questions/357804/string-replace-on-escape-characters – Tao 2011-05-20 12:23:11

+0

我不想通過替換方法或編輯來處理代碼。我想將這個資源文件添加到可以很容易翻譯的「普通」用戶。 – binball 2011-05-20 12:34:37

+0

沒錯,但肯定的是,「普通」用戶會發現將正確的換行符放在正確的位置比保留「\ n」佔位符更自然。 (請參閱@Chilaka Umesh對他的回答的評論)。也許問題是:你如何將這些字符串「移動」到資源文件中?這個移動過程是應該用實際換行符替換\ n。 – Tao 2011-05-20 12:37:52

回答

10

如果您將其添加到資源中,則不需要\ n作爲轉義記錄器 只需在記事本中打開您的資源文件即可在XML文件中查看此內容和cahnge(resx)

用新行在記事本中輸入數據。 複製這一點,在你的資源編輯器粘貼

編輯:

類型/數據粘貼到資源編輯器界面,選擇\ n和與實際換行符替換它,用Shift-Enter

+0

我明白了......但我想盡可能簡單地自動完成。 – binball 2011-05-20 12:11:31

+5

在資源編輯器中輸入「Message。Details:」,然後按「shift + enter」鍵輸入密鑰。這可能會幫助你。 – 2011-05-20 12:18:21

+0

+1 @Chilaka:Thx!而已。 Shift + Enter,謝謝 – binball 2011-05-20 12:38:46

0

也許你可以打開RESX文件的代碼並添加行直接打破在 XML

OR

可能由於轉義字符閱讀時,他們迷路使用也許嘗試\\

+0

thx,但我不想從代碼 - >資源 - >資源代碼編輯切換。 – binball 2011-05-20 12:12:05

1

你可以做這樣的事情(只要你不.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

一個簡單的解決方案是將「佔位符」存儲在資源字符串中。對於instane,該字符串存儲在* .resx的「MessageDetails」鍵下:「Message。Details:{0} {1}」。然後,在你的代碼中,像這樣使用它:

MessageBox.Show(String.Format(GlobalStrings.MessageDetails,Environment.NewLine,@「the message」));

正如您所看到的,這裏的優勢是便攜性。