2009-09-22 75 views
6

在.NET之前,我們有自己的短語本地化系統,並且我們以一種方式構建評論,以嵌套在格式化字符串中,如「{0:price}」。隨着歲月的流逝,我越來越懷念這個問題。.NET格式化字符串 - 評論的最佳實踐?

它不會出現有記錄在.NET格式化字符串原位這樣的方式:

string.Format("{0//numerator}/{1//denominator} = {2//ratio}" 
       ,somevar 
       ,anothervar 
       ,yetanothervar); 

尤其這是在本地化/措辭在插入點得到重新排序是有用的,不更改代碼:

string.Format("Dividing {1//denominator} into {0//numerator} gives {2//ratio}" 
       ,somevar 
       ,anothervar 
       ,yetanothervar); 

任何人有他們使用這些文件,以免出錯時的術語在維護/定位等得到重新安排什麼花樣?

評論的重要性在於,對於本地化和配置,通常情況下,字符串不在變量的代碼中 - 我已經將它們放在資源文件,app.config和數據庫中。

在一個實際的例子中,子類控制公開了一個PhraseID屬性(控件被映射到從表單生成的XML文件中的ID,並且表單控件被動態地轉換),所以子類化的表單做了這樣的事情:

// Handle the phrases without insertion points - this is in the base class 
foreach (Control in this.Controls) { 
    IXLatable ixl = (IXLatable) Control; 
    ixl.Text = GetPhrase(ixl.PhraseID); 
} 

// in the individual form classes, they override the behavior for complex displays: 
lnkPublish.Text = string.Format(GetPhrase(lnkPublish.PhraseID), filename, foldername, userid); 

凡字典包含默認和本地化的字符串,如:

phraseid, language code, phrase 
1,en,"{0//filename} published to {1//foldername} by {2//userid}" 
1,pl,"{2//userid} ublishedpay ethay ilefay {0//filename} otay {1//foldername}" 

這是少了很多可能是一個翻譯(誰不會看到源代碼)將獲得索引錯誤,如果他們在d中提供了評論默認短語。對於非本地化的揚聲器來說,解決翻譯資源中的問題更爲容易。

+0

不是.NET,但消息格式是非常有趣的本地化明智https://github.com/jedtoolkit/messageformat.js – 2012-12-05 23:43:42

回答

4

你可以看看Phil Haack's NamedFormat extension,它允許您使用的格式,如

NamedFormat("{{{foo}}}", new {foo = 123}) 
+0

我對位置使用感到滿意,但這很有趣。我想象更糟糕的運行時問題可能與命名用法。 – 2009-09-22 18:51:02

2

在你的例子中命名變量有意義,將和註釋具有相同的效果。

+1

這事實證明,在非平凡的例子中並非如此。 – 2009-09-22 18:33:56