Форматирование строк .NET - хорошие практики для комментирования? - PullRequest
6 голосов
/ 22 сентября 2009

До .NET у нас была своя собственная система локализации фраз, и мы построили таким образом, чтобы комментарии помещались в строку форматирования, например: "{0: цена}". Я обнаруживаю, что с каждым годом все больше скучаю по этому.

Не похоже, что есть способ документировать строки форматирования на месте, как это в .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}"

Гораздо менее вероятно, что переводчик (который никогда не видит исходный код) получит неправильные индексы, если им будут предоставлены комментарии в фразе по умолчанию. И для нелокализованного говорящего легче устранять проблемы в переведенном ресурсе.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

Вы можете посмотреть Расширение NamedFormat Фила Хаака , которое позволяет вам использовать форматы, такие как

NamedFormat("{{{foo}}}", new {foo = 123})
2 голосов
/ 22 сентября 2009

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

...