Юникод и шрифты

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

Жаль, что вы не можете использовать красивые шрифты, найденные в Интернете, потому что большинство из них поддерживают только ASCII.

4 ответа

Решение

Просто чтобы убедиться: не ожидайте найти шрифт, который поддерживает китайский традиционный, китайский упрощенный и японский.

Существуют отличия глифа для тех же кодовых точек Unicode, поэтому нативный пользователь сразу заметит, что вы не используете правильный шрифт для своего языка.

Для веб-приложения, вероятно, лучше дать список шрифтов, и в списке вам нужен типичный шрифт Windows, типичный шрифт Mac и общий (например, "засечек").

Пометка HTML-страницы (или абзаца) соответствующим тегом lang поможет некоторым (более умным) браузерам выбрать правильный шрифт, если определенные не установлены.

http://www.alanwood.net/unicode/fonts.html

На сайте Алана Вуда есть множество шрифтов Unicode. Для каждого шрифта есть список, объясняющий, какие языки поддерживаются им.

Еще один замечательный сайт - это шрифт в Unifont. Чтобы найти его просто в Google, не имейте репутацию, чтобы связать это еще. Находясь там, просто нажмите вкладки континентов в верхней части сайта, чтобы просмотреть шрифты, включая языки из этих стран.

Вы можете создавать свои собственные веб-шрифты с помощью таких инструментов, как приложение Icomoon.

Приложение Icomoon позволяет выполнять каждое из следующих действий:

  • Получить один или несколько значков из нескольких популярных значков шрифтов
  • Загрузите другие шрифты, которые могут быть как шрифтами значков, так и обычными шрифтами
  • Загрузить файлы SVG для использования в качестве глифов
  • Объедините любое количество символов из любого количества доступных шрифтов
  • Установите шестнадцатеричное значение UNICODE для любых нужных вам символов
  • Экспорт и / или сохранение созданного вами шрифта

Я использовал приложение Icomoon для создания шрифта смайлика Emoji, а также для создания пользовательских значков шрифтов для каждого проекта.

Чтобы включить значок шрифта в ваш CSS, вы можете включить следующий код:

@font-face {
    font-family: 'myfont';
    src:url('fonts/myfont.eot?-td2xif');
    src:url('fonts/myfont.eot?#iefix-td2xif') format('embedded-opentype'),
        url('fonts/myfont.woff?-td2xif') format('woff'),
        url('fonts/myfont.ttf?-td2xif') format('truetype'),
        url('fonts/myfont.svg?-td2xif#myfont') format('svg');
    // Different URLs are required for optimal browser support
    // Make sure to :
    // 1) replace the URLs with your font's URLs
    // 2) replace `#myfont` with the name of your font
    font-weight: normal; // To avoid the font inherits boldness
    font-style: normal; // To avoid font inherits obliqueness or italic
}

.icon {
    font-family: 'myfont', Verdana, Arial, sans-serif; // Use regular fonts as fallback
    speak: none; // To avoid screen readers trying to read the content
    font-style: normal; // To avoid font inherits obliqueness or italic
    font-weight: normal; // To avoid the font inherits boldness
    font-variant: normal; // To avoid the font inherits small-caps
    text-transform: none; // To avoid the font inherits capitalization/uppercase/lowercase
    line-height: 1; // To avoid the font inherits an undesired line-height
    -webkit-font-smoothing: antialiased; // For improved readability on Webkit
    -moz-osx-font-smoothing: grayscale; // For improved readability on OSX + Mozilla
}

Чтобы использовать значок в своем HTML, вы можете выполнить одно из следующих действий:

<!-- Method 1 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family for an entire HTML element -->
<!-- Define your icon fonts in your CSS font-family after your regular fonts  -->
<!-- This means that regular characters are default. Icons are a fallback  -->
<!-- Use UTF-8 characters directly in your HTML for improved human readability -->
<div class="rate"><p>I rate this movie ★★★★☆!!</p></div>

<!-- Method 2 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family for an entire HTML element -->
<!-- Define your icon fonts in your CSS font-family after your regular fonts  -->
<!-- This means that regular characters are default. Icons are a fallback  -->
<!-- Use entity codes in your HTML when UTF-8 support is uncertain -->
<div class="rate"><p>I rate this movie &#9733;&#9733;&#9733;&#9733;&#9734;!!</p></div>

<!-- Method 3 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family only for the icons but not the HTML elements that include them -->
<!-- Define your icon fonts in your CSS font-family before your regular fonts  -->
<!-- This means that icons are default. Regular characters are a fallback  -->
<!-- Use UTF-8 characters directly in your HTML for improved human readability -->
<p>I rate this movie <span class="icon">★★★★☆</span>!!</p>

<!-- Method 4 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family only for the icons but not the HTML elements that include them -->
<!-- Define your icon fonts in your CSS font-family before your regular fonts  -->
<!-- This means that icons are default. Regular characters are a fallback  -->
<!-- Use entity codes in your HTML when UTF-8 support is uncertain -->
<p>I rate this movie <span class="icon">&#9733;&#9733;&#9733;&#9733;&#9734;</span>!!</p>

<!-- Method 5 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family only for the icons and use a separate HTML tag for each icon -->
<!-- Define your icon fonts in your CSS font-family before your regular fonts  -->
<!-- This means that icons are default. Regular characters are a fallback  -->
<!-- Use UTF-8 characters directly in your HTML for improved human readability -->
<p>I rate this movie
    <span class="icon">★</span>
    <span class="icon">★</span>
    <span class="icon">★</span>
    <span class="icon">★</span>
    <span class="icon">☆</span>
    !!
</p>

<!-- Method 6 -->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family only for the icons and use a separate HTML tag for each icon -->
<!-- Define your icon fonts in your CSS font-family before your regular fonts  -->
<!-- This means that icons are default. Regular characters are a fallback  -->
<!-- Use entity codes in your HTML when UTF-8 support is uncertain -->
<p>I rate this movie
    <span class="icon">&#9733;</span>
    <span class="icon">&#9733;</span>
    <span class="icon">&#9733;</span>
    <span class="icon">&#9733;</span>
    <span class="icon">&#9734;</span>
    !!
</p>

<!-- Method 7-->
<!--- * * * * * * * * * * * * -->
<!-- Set a font-family only for the icons and use a separate HTML tag for each icon -->
<!-- Define your icon fonts in your CSS font-family before your regular fonts  -->
<!-- This means that icons are default. Regular characters are a fallback  -->
<!-- Use the 'content' style rule with a ':before selector' in your CSS -->
<p>I rate this movie
    <span class="icon icon-star"></span>
    <span class="icon icon-star"></span>
    <span class="icon icon-star"></span>
    <span class="icon icon-star"></span>
    <span class="icon icon-star-unfilled"></span>
    !!
</p>

Если вы хотите выбрать метод 7, вам понадобится дополнительный код CSS. Этот код CSS будет выглядеть так:

.icon-star:before {
    content: "\2605";
}

.icon-star-unfilled:before {
    content: "\2606";
}

Иконочные шрифты, такие как Iconic, Font Awesome или Glyphicons, как правило, все используют метод 7. Это позволяет избежать необходимости вставлять или вставлять специальные символы из шпаргалки или использовать HTML-объекты.

Это, однако, метод, который имеет несколько недостатков. Прежде всего, требуется поддержка :before CSS-селектор и использование escape-последовательности для символов UNICODE. Ни IE6-7, ни определенные версии Webkit не предоставляют такую ​​поддержку.

Другим недостатком является то, что вы должны использовать отдельный тег HTML для каждого значка, причем каждый тег соответствует одному символу из шрифта значка. Отображение нескольких значков в теге HTML невозможно в методе 7, в отличие от других методов.

Другие методы имеют свои недостатки, однако. Методы 1, 3 и 5 требуют от вас скопировать и вставить символ из шпаргалки или использовать средства для помещения самого символа в ваш код. Ваш редактор кода может не отображать этот символ или он может отображать символ, отличный от того, который указан в шрифте значка, если шрифт значка использует нестандартное отображение этого символа.

Методы 1, 3 и 5 также требуют, чтобы ваш браузер использовал правильную кодировку для отображения правильного символа. Для символов UNICODE это не так очевидно, как для символов ASCII. Это должно быть обеспечено добавлением метатега. <meta charset="utf-8" /> где-то в head вашего HTML-документа.

Методы 2, 4 и 6 не требуют, чтобы вы копировали и вставляли символ, однако это делает ваш код менее читаемым людьми и делает любые изменения в коде более подверженными человеческим ошибкам. Кроме того, так как вам нужно будет искать код HTML-сущности для каждого из значков, которые вы хотите использовать, или вам нужно будет запомнить их. Хотя то же самое очевидно относится и к классам, используемым в методе 7, эти классы гораздо легче запомнить, чем код сущности HTML.

Другие вопросы по тегам