2009-09-22 2 views
6

Перед .NET у нас была своя локальная система определения фразы, и мы построили способ вставки комментариев в строку форматирования, например: «{0: цена}». Я нахожу, что я скучаю по этому все больше и больше по прошествии многих лет.Строки форматирования .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-файле, сгенерированном из формы, и элементы управления формой переводится «на лету»), поэтому подклассовая форма делает что-то вроде этого :

// 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 –

ответ

4

Вы можете посмотреть на Phil Haack's NamedFormat extension, что позволяет использовать форматы, такие как

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

Я доволен позиционным использованием, но это интересно. Я предполагаю, что проблемы с runtime возможны при использовании имени. –

2

В вашем примере, назвав переменные чем-то значимым, будет иметь такое же влияние, что и комментарии.

+1

Это оказывается, не в случае нетривиальных примеров. –