Почему мой CurrentCulture en-GB и мой CurrentUICulture en-US - PullRequest
11 голосов
/ 14 ноября 2009

У меня есть приложение C #, которое должно работать на машинах с разными настройками культуры. Не проблема, подумал я, он просто при запуске запустит текущую культуру машины и сделает все для меня. Ну нет, это показалось бы, что что-то не так.

У меня есть компьютер с Windows XP, для которого все параметры «Язык и региональные стандарты» установлены на английский (США), но при запуске приложения оно сообщает, что мой CurrentCulture равен en-GB, а мой CurrentUICulture равен en-US.

Как мне заставить мою программу просто использовать любой установленный ПК?

Это приложение службы Windows, если оно имеет какое-либо значение.

Спасибо

Ответы [ 3 ]

6 голосов
/ 14 ноября 2009

Служба Windows обычно не запускается под вашей учетной записью, и тогда не имеет значения, какие ваши региональные настройки. Речь идет о региональных настройках системной учетной записи. Я предполагаю, что вы используете en-GB версию Windows, и системная учетная запись все еще использует это.

Есть способы получить доступ к этой учетной записи, отметьте SuperUser .

4 голосов
/ 14 ноября 2009

Я верю, что верно следующее:

  • CurrentCulture (который влияет на форматы чисел и дат) будет отражать региональные настройки учетной записи, под которой работает ваше приложение. Вы можете легко изменить это с помощью Панели управления / Региональные настройки для текущего пользователя, и если вы являетесь администратором, также для пользователя «по умолчанию», который используется для системных учетных записей, которые часто используются для служб Windows. Для смены пользователя по умолчанию где-то есть кнопка «Использовать по умолчанию».

  • CurrentUICulture будет соответствовать языку используемой вами версии Windows. Для версий MUI вы можете изменить это на панели управления, но не для одноязычных версий.

1 голос
/ 14 ноября 2009

Я знаю, что вы можете установить свою инвариантную культуру как часть сборки, но я удивился, когда прочитал это, что культура вашей сборки стала вашей инвариантной культурой. Вы пытались искать все файлы для en-GB только для того, чтобы убедиться, что он не имеет значения по умолчанию?

Несмотря на это, есть обходной путь. Если вы хотите переопределить это с культурой O / S, вы можете получить это в следующем месте и установить для него свойства CurrentCulture и CurrentUICulture:

System.Globalization.CultureInfo.InstalledUICulture
...