2009-06-08 45 views
20

對於我目前使用的項目,我必須將特殊格式的字符串傳送給第三方服務進行處理。所以我建立起來的字符串,像這樣:我們應該在資源中存儲格式字符串嗎?

string someString = string.Format("{0}{1}{2}: Some message. Some percentage: {3}%", token1, token2, token3, number); 

而是然後硬編碼字符串,我想將它移入項目資源:

string someString = string.Format(Properties.Resources.SomeString, token1, token2, token3, number); 

第二個選項是在我看來, ,不像第一個那樣可讀,即閱讀代碼的人將不得不拉起字符串資源來確定最終結果應該是什麼樣子。

我該如何解決這個問題?在這種情況下,硬編碼格式字符串是必要的惡意嗎?

回答

14

我確實認爲這是一個必要的惡習,我經常使用。臭東西,我要做的,就是:

// "{0}{1}{2}: Some message. Some percentage: {3}%" 
string someString = string.Format(Properties.Resources.SomeString 
            ,token1, token2, token3, number); 

..at至少直到代碼足夠穩定,我可能會尷尬具有被別人看到。

+5

你也應該的方式向資源文件添加註釋以說明參數是什麼。如果文件涉及翻譯,這對本地化人員非常有用。 – 2009-06-08 02:45:43

+0

@CodingMonkey:同意。儘可能讓本地化工程師的生活變得輕鬆。你不需要翻譯猜測。 – 2009-06-08 02:52:22

+1

@MichaelPetrotta>你如何穩定代碼,以便這些{0}字符串不再需要?我個人認爲不使用`string.Format`,而是使用:`「begin {middle} end」.Replace(「{middle}」,middle)``。當然,這種方法有其自身的問題... – Laoujin 2013-11-22 18:38:08

2

我不明白爲什麼在程序中包括格式字符串是一件壞事。與傳統的無證幻數不同,它乍一看很明顯。當然,如果你在多個地方使用格式字符串,它肯定應該存儲在適當的只讀變量中以避免冗餘。

我同意將它保留在資源中是不必要的間接。如果您的程序需要本地化,並且您正在通過資源文件進行本地化,則可能出現異常。

15

有幾個原因可能會導致您這樣做,但唯一的原因是如果您要將應用程序本地化爲另一種語言。

如果您使用的資源字符串有幾件事要記住。

  1. 儘可能在您希望本地化的資源字符串集合中包含格式字符串。這將允許翻譯人員對格式化項目的位置進行重新排序,以使其在翻譯文本的上下文中更好地適應。

  2. 避免在您的語言中使用格式標記中的字符串。這些數字最好使用 。例如,該消息:

    「指定的值必須是{0}和{1}之間」

    是巨大的,如果{0}和{1}被像圖5和10號如果格式化在像「五」和「十」這樣的字符串中,這會使本地化變得困難。

  3. 通過簡單地命名您的資源,您就可以瞭解您正在討論的可讀性問題。

    string someString = string.Format(Properties.Resources.IntegerRangeError,minValue,maxValue);

  4. 評估您是否在代碼中的正確抽象級別生成用戶可見字符串。一般而言,我傾向於儘可能將代碼中所有用戶可見的字符串分組到最接近用戶界面的代碼中。如果某些低級別的文件I/O代碼需要提供錯誤,則應該使用您在應用程序中處理的異常和一致性錯誤消息來執行此操作。這也將整合所有需要本地化的字符串,而不是讓它們貫穿整個代碼。

1

是你可以 enter image description here

新的,讓我們看看這將如何

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) 

每次

給了我動力消息後,我期運用ResXManager

相關問題