Как я могу предотвратить смещение текста для некоторых иностранных языков? - PullRequest
23 голосов
/ 03 января 2011

У меня есть многоязычный проект (в настоящее время 13 языков), в котором используются различные варианты шрифтов Helvetica Neue, в основном жирный, сжатый и регулярные сокращения из набора шрифтов LinoType Pro (который включает символы Западной Европы) и то же самое для кириллица. Возможно, мы добавим китайские и японские варианты в будущем.

Я настроил проект для использования разных таблиц стилей CSS и отдельно загружал шрифты для каждой версии, в зависимости от того, какой язык выбирает пользователь, поэтому я могу иметь разные высоты строк, кернинг и / или размеры шрифтов, чтобы все сохраняло Оригинальный вид, даже если шрифты не похожи друг на друга.

Все это работает хорошо, за исключением одной проблемы: почему-то все буквы кириллицы кажутся смещенными. Они появляются на 2-3 пикселя ниже правильной базовой линии и фактически выступают за нижнюю границу текстового поля, даже если для поля установлено автоматическое изменение размера. Когда я использую textfield.getCharBoundaries(), все значения кажутся правильными, даже если они явно не отображаются правильно.

Чтобы все выглядело аккуратно, я мог бы, конечно, вручную переместить все проблемные текстовые поля вверх или вниз в зависимости от языка и размера шрифта, но мне было интересно, есть ли какой-нибудь способ предотвратить или хотя бы обнаружить такое смещение, чтобы автоматически обрабатывать корректировки - Flash Player должен иметь некоторую информацию о том, как все отображается, не так ли? У кого-нибудь из вас были подобные проблемы? Или еще лучше: решение?

Ответы [ 7 ]

2 голосов
/ 28 мая 2011

Есть ли в вашей версии Helvetica Neue символы кириллицы?Если нет, то вы получаете резервный шрифт, и шрифт, используемый для русского языка, на самом деле не Helvetica Neue, а что-то другое, с другими метриками.И у вас будет больше этого, если вы перейдете на китайский язык, потому что Helvetica Neue определенно не содержит китайских глифов: -)

С другой стороны, действительно-действительно рассмотрим TLF.Это лучше для международной поддержки, и Flash Player 10.0 (который представляет TLF) уже более 2,5 лет.Постарайтесь убедить своих клиентов, что неоправданно просить международную типографику высокого уровня с использованием древних технологий.Это или / или сделка.

2 голосов
/ 26 января 2011

У меня была эта проблема для китайцев, но только в OS X против Windows. Я не мог понять, как автоматически получить правильные метрики для того, где персонажи действительно были. Я получил грубую функцию, которую вызывал всякий раз, когда настраивал TextField:

  public static function adjustPositioning(field:TextField):void
  {
    if(OS != "MAC") return;
    var fontSize:int = field.defaultTextFormat.size as int;
    field.y += fontSize/5;
  }

Я настраивал все свои текстовые поля в коде, а не в IDE, так что это было легко. Я думаю, что это решение, которое вы не ищете, хотя!

1 голос
/ 14 июля 2011

Вы пробовали использовать шрифт фиксированной ширины?

1 голос
/ 18 июня 2011

Вы пытались просто изменить шрифт, чтобы приспособиться к 1px или около того. Просто сдвиньте буквы вверх (или вниз). Я не совсем прочитал все, что все написали. Хотя в настоящее время он не установлен, я считаю, что я предпочитаю редакторы "Fontlab".

1 голос
/ 20 мая 2011

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

Fontforge довольно приличный, готов поспорить, вы сможете отредактировать шрифт через час после настройки.

1 голос
/ 14 января 2011

У меня были похожие проблемы, и все решения, которые я пробовал, довольно сложны или имеют некоторые недостатки:

  • Используйте TLF. Я знаю, ты не хочешь, но это довольно безопасно (но сложно) решение.

  • Не используйте сглаживание «читабельность», использовать "анимацию". Будут смотреть шрифты худшее, но их показатели должны быть немного надежнее.

  • Попробуйте использовать cacheAsBitmap или null фильтры (т.е. BlurFilter (0,0,0)). Это будет работать в некоторых случаях, но не во всех.

  • Вручную кэшировать все текстовые поля как BitmapData. Это должно показать многое более надежные показатели, но могут быть сложно. Вы даже можете это исправить на летать с getColorBounds, чтобы получить «реальные» показатели. Но опять же, это все очень сложно, и требует много испытаний.

1 голос
/ 14 января 2011

Я столкнулся с подобной проблемой с арабским языком. Похоже, приложения Adobe всегда имеют проблемы с неанглийскими языками. На некоторых языках в Flash Player текст выглядит испорченным, но при воспроизведении Flash в Flash Player проблемы не существует.

Я не уверен, что может быть решением вашей проблемы, но вы можете попробовать немного обойти.

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

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