Pull to refresh

Кириллица в .NET-приложениях под Mono

Reading time 2 min
Views 3.3K
.Net-приложения, использующие WinForms, вполне могут работать под Mono, но в некоторых дистрибутивах Linux вместо русских шрифтов пользователи видят стройные ряды квадратов и разъехавшийся интерфейс.


Изучение проблемы показало, что в разных Linux-дистрибутивах на одной и той же версии mono (в частности, 2.4.2.3) программа была как с нормальным интерфейсом, так и с квадратами. Поиски решения в интернете привели к описанию проблемы с драйвером для видеокарт Intel в Ubuntu xserver-xorg-video-intel. Десятки разных тем на англоязычных форумах, описывающих это решение с использованием последней версии драйвера. Например, здесь и здесь. При этом на практике обновление драйверов проблему не решало.
Второй по популярности совет – установить пакет шрифтов msttcorefonts тоже не помог. Однако копнув чуть в сторону, мы обнаружили, что если в программе явно использовать простые шрифты, вроде Arial, то проблема квадратов исчезает. Оказалось, что «виноват» в этом шрифт Ms Sans Serif, используемый по умолчанию для всех форм на WinForms. Судя по всему, шрифт, заменяющий его в Ubuntu 9.04, содержит кириллицу, но начиная с 9.10 этот шрифт уже без кириллицы.

Если программа Ваша, то вполне можно поменять в ней шрифт на Arial, или другой имеющийся в вашем дистрибутиве, хотя под Windows приложение будет выглядеть не так, как остальные. Если же исходных кодов или желания менять приложение нет, то поможет установка дополнительных шрифтов. При наличии самой Windows гораздо проще будет взять файл micross.ttf из C:\Windows\Fonts и положить его в любой подкаталог /usr/share/fonts/truetype/ (я назвал свой winfonts и собрал в нем вообще все шрифты windows). Также можно воспользовать приложением FontViewer, которое проассоциировано с .ttf-файлами и установить шрифт с помощью него.


После установки шрифтов нужно просто перезапустить наше приложение и все встает на свои места


Мы надеемся, что это простое решение поможет и тебе, %username%. Мы не долго экспериментировали с другими вариантами решения, но будем рады узнать, каким образом еще можно решить эту проблему, имея на руках исходный код приложения. Может быть, в mono есть возможность задать используемые шрифты в конфигурации?
Будем рады услышать замечания и предложения. Идеальное решение – без необходимости участия пользователя и глобальной смены шрифтов во всех формах и контролах.

Upd1: Есть еще один способ.
— открыл DejaVu Sans c помощью FontForge
— Поменял в разделе ttf info имя шрифта на Microsoft Sans Serif
— Нажал Generate ttf
— Полученный результат скопировал в каталог со шрифтами.
Этот способ решает проблему с наличием лицензии на Windows.

P.S. Мы – это xeon и мой коллега fo2rist, у которого пока что нет инвайта на хабрахабр. Если у вас есть свободный инвайт и желание помочь, напишите мне в личные сообщения. Спасибо.
Tags:
Hubs:
+39
Comments 15
Comments Comments 15

Articles