Вопрос

Представьте, что вы создаете презентацию, которая будет переведена на дюжину разных языков, в том числе с нелатинскими символами (например, на китайский). Руководство по стилю фирменного стиля клиента диктует, что определенные шрифты приемлемы для определенных языков. Сам контент должен быть выведен наружу, чтобы текст можно было заменить, не открывая файл .fla и не сохраняя заново графическое изображение.

Итак, мы говорим о динамических TextField, заполненных из XML, с заменой шрифта для соответствия локали зрителя - что является наиболее безболезненным способом динамической загрузки только необходимых шрифтов (независимо от размера файла) и применения их как необходимо? Я ищу решения, использующие только Flash, а не Flex .

Это было полезно?

Решение 2

Я полностью разочарован тем, что никто не знал об этом - о, хорошо. Наконец-то я нашел кого-то, кто написал небольшой класс для управления процессом загрузки шрифтов и дал указания о том, как создать .swfs для его загрузки:

Загрузка шрифтов Flash AS3

Надеюсь, что другие люди сочтут это полезным - это оказалось волшебной палочкой для моих проблем.

Другие советы

Это немного хлопотно, но это вполне возможно. То, что вам нужно будет сделать, это "встроить" шрифт внутри отдельного SWF-файла, загрузите этот SWF-файл из основного приложения, а затем зарегистрируйте этот шрифт внутри этого SWF-файла. Это позволит вам выполнять загрузку шрифтов во время выполнения. Это потребует от вас либо указать шрифт для каждого языка в приложении, либо в любых файлах, в которых вы храните переводы, что, возможно, не идеально, но также не включает в себя все шрифты в вашем основном приложении. Это могло бы составить сотни килобайт шрифтов, загруженных без причины.

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

Ну, вы кое-как узнаете, какой язык вы загружаете. Автоопределение может быть довольно сложным.

Предполагая, что вы знаете, на каком языке это содержимое, вы можете зарегистрировать шрифты, которые будут использоваться во время выполнения, используя Font.registerFont () ; При этом вы можете загрузить SWF-файл, содержащий шрифт, зарегистрировать его, и он будет доступен для будущего использования во всех текстовых полях. распечатать («образец кода»);

[Embed(src="someFont.ttf", fontFamily="myFont", mimeType="application/x-font")]
private var fontClass:Class;

...

Font.registerFont(fontClass);

Обратите внимание, что для поддержки тега Embed вам нужно будет скомпилировать его с помощью гибкого компилятора.

Кроме того, хорошей утилитой является шрифт. .hasGlyphs () , который вы можете использовать, чтобы проверить, доступны ли символы, которые вы используете, во встроенных шрифтах. Это может быть использовано либо для возврата к системному шрифту, либо для отображения предупреждения вам как разработчику (если вы забыли какие-либо символы или что-то еще). Подклассы TextField для автоматической проверки могут быть хорошей идеей.

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

Прежде всего, убедитесь, что вы установили ожидания, чтобы никто не думал, что вы будете использовать встроенные шрифты на азиатских языках, таких как китайский и японский. Если вы не планируете загружать несколько мегабайт глифов, вы будете использовать шрифты устройства, полная остановка. Поэтому разумно иметь указания, какой класс шрифта использовать - _sans , _serif , _typewriter или их локализованные эквиваленты - но не рекомендации относительно шрифта как такового.

Во-вторых, в прошлом мой подход всегда заключался в том, чтобы убедить людей в том, что в большинстве случаев им все равно лучше использовать шрифты устройства. Использование шрифтов устройства сократит ваше время разработки и позволит избежать ошибок. Это заставит ваш контент загружаться быстрее (если по сети), и практически во всех случаях будет рендериться быстрее. Часто это также будет более четким.

Клиенты предпочитают требовать, чтобы весь их основной текст был написан на языке Garamond-Extra-British или где-либо еще, но убедитесь, что они знают о связанных с этим расходах. Если они увидят свет, вы избавите себя от значительной боли.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top