Как мне отформатировать что-то для другой локали в Windows?
Например, в управляемом коде C # я бы попытался отобразить DateTime
, используя en-US
локаль с:
String s = DateTime.Now.ToString(CultureInfo.CreateSpecificCulture("en-US"));
TextRenderer.DrawText(
e.Graphics, s, SystemFonts.IconTitleFont,
new Point(16, 16), SystemColors.ControlText);
И это прекрасно работает, когда локаль моего компьютера en-US
:
Он даже отлично работает, когда локаль моего компьютера de-DE
:
Но он полностью разваливается, когда локаль моего компьютера ps-AF
:
Примечание: Мой пример кода находится в .NET, но может быть и собственным.
Обновление : Попытка установить System.Threading.Thread.CurrentThread.CurrentCulture
в en-US
перед вызовом DrawText
:
var oldCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
try
{
// String s = DateTime.Now.ToString(CultureInfo.CreateSpecificCulture("en-US"));
String s = DateTime.Now.ToString();
TextRenderer.DrawText(e.Graphics, s, SystemFonts.IconTitleFont, new Point(16, 16), SystemColors.ControlText);
}
finally
{
System.Threading.Thread.CurrentThread.CurrentCulture = oldCulture;
}
Без помощи.
- Девять, без помощи
- Джек, без помощи
- Восемь, возможно прямой
- Король, возможный флеш
- Туз, без помощи
- Шесть, возможно прямой
- Дейв о любви к дилеру
Ace ставки.
Обновление два:
Из записи в блоге Майкла Каплана:
GDI не дает дерьма о форматировании или о чем-то, что связано с локалями, за одним единственным исключением:
Замена цифр
Каждый раз, когда вы переходите к отображению текста, он захватывает эти параметры подстановки цифр в локали пользователя (включая информацию о переопределении пользователя) и использует эту информацию, чтобы решить, как отображать числа.
И нет возможности переопределить эти настройки на уровне, где GDI их использует.
Интересно, как Chrome управляет им. Когда я пишу цифры здесь, в вопросе stackoverflow, Chrome отображает их, используя латинские цифры:
0123456789
См: