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 исключение.

Другие вопросы по тегам