FxCop CA1305: текущая культура против текущей культуры - PullRequest
3 голосов
/ 23 июля 2011

Итак, у меня есть несколько файлов ресурсов для локализации.Это строки, которые можно отформатировать.

Например:

MyResource.resx
 Title: "MyApp - Ver: {0}"

Затем я возвращаю его, выполнив так:

public String Title
{
    get { return String.Format(CultureInfo.CurrentUICulture, MyResources.Title, 1); }
}

Я понимаю разницу междуCurrentUICulture и CurrentCulture, но FxCop советует мне использовать CurrentCulture вместо этого?

Ответы [ 3 ]

7 голосов
/ 25 июля 2011

В некоторой степени FxCop прав: вам не следует использовать CurrentUICulture в этом случае. Как уже говорили другие, CurrentCulture предназначен для форматирования с учетом локали, тогда как CurrentUICulture предназначен для чтения переводимых строк из ресурсов.
То, что вы сделали здесь, было форматирование числа, поэтому FxCop жалуется, что вы использовали неверный CultureInfo. К сожалению, FxCop не сказал вам, что вы должны использовать CultureInfo.InvariantCulture. Зачем? Потому что номер версии не зависит от локали. Вы всегда увидите что-то вроде 1,9, а не 1,9. Таким образом, InvariantCulture - это путь.
Microsoft даже предоставила специальный класс для хранения информации о версии - как ни странно, его имя Version (AFAIR находится в System пространстве имен). Это всегда будет представлять вам номера версий, как я упоминал ранее, когда вы делаете ToString(). Его конструктор также ожидает строку версии, инвариантную к локали, при ее создании.

5 голосов
/ 23 июля 2011

String.Format часто используется для числового форматирования или форматирования даты, которое основано на CurrentCulture, а не CurrentUICulture.

3 голосов
/ 23 июля 2011

Другое дело, что CurrentUICulture может быть нейтральной культурой, в то время как CurrentCulture всегда является специфической культурой.

Типы XXXFormatInfo не работают с нейтральными культурами и вызовут исключение NotSupportedException.

...