FxCop CA1305: текущая культура против текущей культуры
Итак, у меня есть несколько файлов ресурсов для локализации. Это строки, которые можно отформатировать.
Например:
MyResource.resx
Title: "MyApp - Ver: {0}"
Я тогда возвращаю это, делая так:
public String Title
{
get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); }
}
Я понимаю разницу между CurrentUICulture и CurrentCulture, но FxCop советует мне использовать CurrentCulture вместо этого?
3 ответа
В некоторой степени FxCop прав: вы не должны использовать CurrentUICulture
в этом случае. Как уже говорили другие, CurrentCulture
предназначен для форматирования с учетом локали, тогда как CurrentUICulture
предназначен для чтения переводимых строк из ресурсов.
То, что вы сделали здесь, было форматирование числа, поэтому FxCop жалуется, что вы использовали неправильно CultureInfo
, К сожалению, что FxCop не сказал вам, вы должны использовать CultureInfo.InvariantCulture
, Зачем? Потому что номер версии не зависит от локали. Вы всегда увидите что-то вроде 1,9, а не 1,9. таким образом InvariantCulture
это путь
Microsoft даже предоставила специальный класс для хранения информации о версии - как ни странно, его имя Version
(AFAIR это в System
Пространство имен). Это всегда будет представлять вам номера версий, как я упоминал ранее, когда вы делаете ToString()
, Его конструктор также ожидает строку версии, инвариантную к локали, при ее создании.
String.Format
часто будет использоваться для числового или форматирования даты, которая основана на CurrentCulture
скорее, чем CurrentUICulture
,
Другое дело, что CurrentUICulture
может быть нейтральной культурой в то время как CurrentCulture
это всегда особая культура.
XXXFormatInfo
типы не работают с нейтральными культурами и будут поднимать NotSupportedException
исключение.