Как лучше всего обращаться с английским и китайским в приложении Flex? - PullRequest
2 голосов
/ 01 октября 2008

У меня есть требование предоставить гибкий компонент на английском и нескольких азиатских языках. Я посмотрел на документацию по Flex, и мне кажется, что мне нужно создать несколько SWF, что кажется неправильным.

Кто-нибудь знает простой и практичный способ объединения строковых ресурсов на разных языках и обработки шрифтов?

Ответы [ 5 ]

7 голосов
/ 01 октября 2008

Полагаю, вы знакомы с основами локализации приложения Flex, но если вы хотите узнать больше, здесь есть хорошее и подробное описание: Локализация во время выполнения .

В Flex 3 у вас есть три варианта решения вашей проблемы:

  1. компилировать все языки в SWF и переключать язык во время выполнения
  2. составить отдельный SWF для каждого языка
  3. не компилировать язык SWF или язык по умолчанию и загружать дополнительные языки во время выполнения

Первый вариант, вероятно, самый распространенный, наименее сложный и не имеет многих недостатков. Два других можно использовать, если у вас есть особые потребности, например, необходимость уменьшить размер SWF-файла любой ценой или вам нужно загрузить все строки из базы данных во время выполнения.

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

<Label text="{resourceManager.getString('mybundle', 'mystring")'}/>

Это позволит получить строку с именем «mystring» в пакете ресурсов, скомпилированном из «mybundle.properties» в текущей локали.

Чтобы убедиться, что каждая локаль фактически скомпилирована в приложение, вы добавляете -locale=en_US,sv_SE к флагам компилятора (но измените часть en_US,sv_SE на языки, для которых у вас есть пакеты ресурсов). Вам также необходимо добавить расположение каталогов к исходному пути: -source-path+=locale/{locale} (часть "{locale}" будет автоматически заменена значениями флага -locale).

Теперь вы собрали все свои языки в SWF и можете менять языки во время выполнения. Для этого нужно изменить свойство localeChain диспетчера ресурсов:

resourceManager.localeChain = ["sv_SE", "en_US"];

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

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

Другая проблема, с которой вы столкнулись, связана со шрифтами. Этот хитрее. Лучше всего было бы иметь шрифт с полным диапазоном символов Unicode, так что вам нужно будет только внедрить его, и любой текст будет отображаться. Однако это означает, что ваши варианты немного более ограничены. Я знаю, что есть по крайней мере одна версия Aria в Windows, которая имеет огромное количество символов, и на Mac есть Helvetica (я думаю, или это может быть Lucida Grande, или оба), который также имеет большинство из них. вам нужно отобразить много азиатских языков.

Встраивание всех языков в один SWF-файл обычно очень мало увеличивает размер файла, потому что текст очень легкий, а шрифты - нет. Встраивание целой версии Arial в Юникоде может увеличить размер файла SWF на несколько мегабайт, что отстой для веб-приложений. В зависимости от ситуации вам, возможно, придется скомпилировать один SWF для каждого языка только потому, что в противном случае данные шрифта могут сделать SWF громоздким.

1 голос
/ 02 октября 2008

Остерегайтесь шрифтов. Системные шрифты не самые красивые, но азиатские шрифты слишком велики для встраивания. Мы прибегли к внедрению латинских шрифтов для английского языка и переходу на системные шрифты для китайского.

Будьте осторожны с вращением системных шрифтов - ваш текст исчезнет. Я думаю, что Flash 10 мог бы это исправить.

Кроме того, будьте очень осторожны со строкой шрифта, которую вы указываете для китайского языка.

Большинство ОС имеют изящную запасную логику - если вы укажете Trebuchet и попытаетесь отобразить китайский символ, ваша ОС может решить вместо этого использовать какой-нибудь азиатский шрифт. Flash, кажется, испортил эту запасную логику и динамически переключается между двумя или более азиатскими шрифтами. У нас были случаи, когда при наведении курсора на текстовый блок переключался шрифт.

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

0 голосов
/ 01 октября 2008

Вышеперечисленный важный шаг - запустить команду:

copylocale.exe en_US sv_SE

из папки bin sdk. Это в статье, хотя.

0 голосов
/ 01 октября 2008

В Flex 2.01 язык должен быть встроен в SWF - вы не можете изменить его во время выполнения. В Flex 3 вы можете переключать язык во время выполнения.

http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Runtime_Localization

0 голосов
/ 01 октября 2008

Мы используем Flex для клиентской части нашего приложения и поддерживаем I18N через ResourceBundle с.

...