Поддержка нескольких шрифтов / языков во Flash - PullRequest
4 голосов
/ 09 декабря 2008

Привет,

Я сейчас занимаюсь написанием Flash-приложения, которое поддерживает несколько языков. Первоначально я выбрал шрифт Tahoma для поддержки Unicode. Клиент предпочитает нестандартный шрифт, такой как Lucida Handwriting. Lucida Handwriting не имеет такой же поддержки, скажем, кириллицы, как Tahoma, что создает проблему, которую можно решить несколькими способами, и я хотел бы попросить вашего совета, который предпочтительнее:

Из того, что я понимаю, я мог бы:

  • Предоставьте клиенту список шрифтов, полностью совместимых с Юникодом (кириллица, иврит, арабский, традиционный китайский, восточноазиатский и т. Д.). (Я не знаю, где взять такой список; мой поиск в Интернете привел только к спискам частично совместимых с юникодом шрифтов. Попробуйте http://look.fo/list-of-unicode-compliant-fonts в качестве хорошей отправной точки, чтобы увидеть, где я посмотрел).
  • В зависимости от местоположения клиента (которое у нас уже есть), отрисовка в Lucida Handwriting для англоязычных пользователей и в Tahoma для международных пользователей. Это может быть чем-то вроде головной боли; У кого-нибудь был опыт такого подхода?
  • Создание нового шрифта (IE, AlexeyMK Bold), который использует Lucida Handwriting для английского языка и Tahoma для всего остального. Это объявление что-то вроде 500k к весу файла Flash, но должен (если я правильно понимаю) загружаться только в первый раз.

Что вы посоветуете? Какие из них являются разумными решениями, а какие полностью существуют? Есть ли способ, о котором я не думаю?

Большое спасибо! Алексей

РЕДАКТИРОВАТЬ: Хорошая статья на эту тему: http://www.itworld.com/print/58558

1 Ответ

2 голосов
/ 09 декабря 2008

Ну, в конечном итоге у вас есть только два реальных варианта: либо вы встраиваете шрифт в SWF, гарантируете, как будут выглядеть ваши шрифты, либо нет, и используете шрифты устройства. (Или их сочетание с использованием встроенных шрифтов или шрифтов устройства в зависимости от региона.)

Если вы не встраиваете какие-либо шрифты, то любой шрифт, который вы определяете для своего текста, в конечном итоге является всего лишь предложением - то, что пользователь увидит, это шрифты устройства, отображаемые на их собственной машине (с использованием шрифтов на этой машине). Таким образом, вы можете «предложить» Tahoma, но то, что увидит пользователь, будет зависеть от того, есть ли у него этот шрифт (и он может отличаться, скажем, для версий шрифта для Mac и версий для ПК). Естественно, это также зависит от поддержки; если у них нет азиатских шрифтов, то они не увидят, например, китайский. (Примечание: вы также можете выбрать шрифт типа «_sans», который просто говорит клиенту использовать его стандартный шрифт без засечек. Я предполагаю, что на практике это будет тот же шрифт, который был бы выбран, если вы d определил "Tahoma", но YMMV.)

Если вы встраиваете свои шрифты, то пользователь увидит именно то, что вы ожидаете, потому что шрифт отображается Flash, а не ОС. Но если вы встраиваете полностью для всех регионов, включая глифы, необходимые для китайского языка, то, я думаю, вы обнаружите, что он добавляет значительно больше, чем 500K ... больше, чем 2-5MB в моем опыте. Но, может быть, есть некоторые детали, которые мне не хватает. В любом случае, для доставки контента через Интернет я обычно предполагаю, что как минимум азиатские шрифты должны быть шрифтами устройства.

Чтобы добавить слово о смешанном решении, я сделал это, и это выполнимо. То есть, предполагая, что вы можете добавить логику в свой SWF-файл, вы можете (например) создать два из каждого текстового поля, одно с использованием встроенного «Lucida what», а другое с помощью не встроенных «_sans», а затем во время выполнения создайте одно из них невидимы и помещают текст в другой, в зависимости от того, какой регион вы показываете. (Я сделал это, сделав один компонент LocalizedTextfield и сделав так, чтобы он считывал языковой стандарт из статического свойства при его инициализации.) Затем для каждого языкового стандарта вам просто нужно решить, стоит ли размер файла отображать для этого конкретного набора глифов.

И последнее слово: вы не обязательно должны предполагать, что размер файла, полученный вашими шрифтами, будет загружен только один раз. Если вы делаете свой контент простым способом и встраиваете шрифты в текстовые поля, тогда информация о шрифте будет частью вашего SWF-файла и, следовательно, будет загружаться каждый раз, несмотря ни на что. Для его вывода вы можете сделать компонент Label отдельным файлом, а затем принять решение, загружать его или нет, зависит от настроек кэширования браузера. Вы также можете извлекать сам ресурс шрифта и использовать его в качестве общего ресурса, но в AS2 это несколько проблематично. Я слышал, что в AS3 проще, но сам этого не делал.

...