Полагаю, вы знакомы с основами локализации приложения Flex, но если вы хотите узнать больше, здесь есть хорошее и подробное описание: Локализация во время выполнения .
В Flex 3 у вас есть три варианта решения вашей проблемы:
- компилировать все языки в SWF и переключать язык во время выполнения
- составить отдельный SWF для каждого языка
- не компилировать язык 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 громоздким.