Visual Studio: Шрифт для фрагмента кода

Visual Studio 2013. Если язык операционной системы отличается от английского, то почему-то в Microsoft Help Viewer начинает сбоить оформление.
Так, например, шрифт становится Batang, что очень сильно напрягает (смотреть изображение в отдельном окне, если вдруг браузер сглаживает изображение, тогда будет понятно, в чем проблема):
Visual Studio: Шрифт для фрагмента кода

Разработчики не планируют в текущей версии HelpViewer исправлять косяк со шрифтами, поэтому пока нашел два способа для его ручного исправления.

Мое решение проблемы в конце статьи.

1. Cпособ с изменением стилей для IE

  • Создаем файл ie.css и кладем его куда-нибудь (например в папку C:\Program Files (x86)\Microsoft Help Viewer\v2.1\)
  • В этот файл нужно вставить код:
    body {
    font-family: "Segoe UI", Verdana, Arial; 
    }
    
    .codeSnippetContainerCode pre {
    font-family: Consolas, Courier, monospace; 
    }
    
    span.code { 
    font-family: Monospace, Courier New, Courier; 
    }
  • Файл сохранить и запустить Internet Explorer.
  • В нем зайти в Сервис -> Свойства браузера -> Общие -> Представление -> Оформление
  • Там проставить галки «Не учитывать шрифты, указанные на вэб-страницах» и «Оформлять, используя пользовательский стиль«
  • Нажать «Обзор» и указать созданный файл ie.css
  • Нажать «ОК»

2. Способ из инета с изменением файлов справки

  • Заходим в папку с offline-справкой (у меня это D:\Visual Studio Pro 2013 English MLF X19-27145\Offline help)
  • Распаковываем с помощью 7-zip файл Branding_en-US.mshc
  • В полученной папке Branding_en-US открываем в редакторе файл branding.css
  • Там меняем font-family на что-то вроде Segoe UI, Verdana, Arial; (только этот способ у меня не сработал!)
  • Потом естественно его нужно запаковать обратно в zip и вернуть расширение mshc.

3. Способ со сменой языка системы — самый простой, но не всегда удобный в использовании способ

  • Панель управления -> Язык и региональные стандарты
  • Дополнительно -> Изменить язык системы -> Английский (США)
  • ОК
  • Перезагрузить компьютер
  • * Данный способ может негативно сказаться на отображении названия пунктов меню или кнопок в программах НЕ поддерживающих юникод. Например у меня стали некорректно отображаться надписи в PSPad.
    update 23.11.14: Слишком много проблем появляется из-за смены языка для НЕ-unicode программ. Дошло до того, что не смог выполнить установку драйвера для сканера, т.к. все надписи были знаками вопроса. Пришлось переименовывать папку с ресурсами установщика с 0409 (английские ресурсы) на 0419 (русские ресурсы). После этого установка запустилась на английском языке.

Получается получше чем было:
Visual Studio: Шрифт для фрагмента кода

Поскольку третий вариант мне тоже не подошел, то я стал дальше искать решение этой проблемы. Для этого я вооружился Process Monitor стал копать…

Согласно статье Mapping Code Pages to Script IDs в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts хранится информация о шрифтах.

Для текущего пользователя (меня) я отловил обращение к ветке реестра
HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\3\
Там HelpViewer запросил ключ IEPropFontName = Times New Roman
Попробовал его сменить на более уместный Arial.
Помимо этого было обращение к ключу IEFixedFontName = Courier New.
Его я сменил на Courier.

Теперь для HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\4\ сделал то же самое.

Help Viewer продолжал использовать этот «красивый» шрифт для всего документа справки (для описания и для текста исходника).

Шрифты с засечками, использование которых отловил Process Monitor:
MINGLIU.TTC
MSMINCHO.TTC
batang.ttc

Странно, что многие записи в реестре HelpViewer найти не смог:

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_PRIVATE_FONT_SETTING
NAME NOT FOUND

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_CSS_SHOW_HIDE_EVENTS
NAME NOT FOUND

HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_CSS_SHOW_HIDE_EVENTS
NAME NOT FOUND

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\Default_IEFontSizePrivate
NAME NOT FOUND

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\Settings\Always Use My Font Face

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\6\IESerifFontName
NAME NOT FOUND

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\6\IESansSerifFontName
NAME NOT FOUND

HKU\S-1-5-21-3981433366-2493112781-1612577028-1000\Software\Microsoft\Internet Explorer\International\Scripts\6\IEUIFontName
NAME NOT FOUND

EN
C:\Windows\ServiceProfiles\LocalService\AppData\Local\~FontCache-FontFace.dat

C:\Windows\ServiceProfiles\LocalService\AppData\Local\~FontCache-S-1-5-21-3981433366-2493112781-1612577028-1000.dat

HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
SUCCESS

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes\Segoe UI
NAME NOT FOUND

Запретил доступ к batang.ttc, так helpviewer вообще стал отображать пустое окно.
Пришлось сбрасывать права на этот файл: icacls batang.ttc /T /Q /C /RESET

Оставалась еще одна мысль, ее и воспользовался — удалить этот шрифт. Пробовал простым удаление в проводнике — не получилось. Система писала, что невозможно удалить файл, поскольку он используется. В безопасном режиме писалось то же самое. Получилось удалить так:

del /f /s /q /a "C:\Windows\fonts\batang.ttf"

На всякий случай перезагрузил систему. После чего запустил Visual Studio 2013, а оттуда HelpViewer — проблемы со шрифтами больше не было!!! Удаление шрифта batang.ttf решило проблему!
R сожалению этот способ не работает на Windows 10. Там система начинает подставлять любой другой доступный шрифт, похожий на Times…

Решение проблемы в этой статье.