Попытка добавить локали в мобильное приложение Flex: resourceManager is null
В Flash Builder 4.7 (с AIR 3.5) я пытаюсь добавить языковые стандарты en_US и de_DE в приложение Flex Mobile, которое изначально было только ru_RU.
Т.е. изначально у меня было только -locale ru_RU
в Свойствах проекта -> Компилятор Flex и жестко запрограммированный русский текст в исходном коде (все работало нормально).
Но после изучения локализации документов Adobe во Flex - часть 1. Компиляция ресурсов в приложение и добавление новых локалей, я изменил компилятор Flex (флаги) на: -locale ru_RU en_US de_DE
:
И добавили src\locale\{locale}
к исходному пути:
Наконец я создал подкаталоги и файлы
src\locale\ru_RU\resources.properties
src\locale\en_US\resources.properties
src\locale\de_DE\resources.properties
Вот содержимое en_US\resources.properties:
menu.play=Play via
menu.weekly=Weekly rating
menu.daily=Daily misere
menu.settings=Settings
Каталог AIR 3.5 SDK уже содержит 3 папки:
C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\sdks\4.6.0 (AIR 3.5)\
frameworks\projects\framework\bundles\ru_RU
frameworks\projects\framework\bundles\en_US
frameworks\projects\framework\bundles\de_DE
так что я не использовал copylocale
утилита (верно?)
В моем исходном коде я изменил первый вид:
<fx:Metadata>
[ResourceBundle("resources")]
</fx:Metadata>
......
[Bindable]
private var _ac:ArrayCollection = new ArrayCollection([
{ icon: OK_ICON, view: OK, label: resourceManager.getString('resources','menu.play'), msg: 'Odnoklassniki.ru' },
{ icon: MR_ICON, view: MR, label: resourceManager.getString('resources','menu.play'), msg: 'Mail.ru' },
{ icon: VK_ICON, view: VK, label: resourceManager.getString('resources','menu.play'), msg: 'Vk.com' },
{ icon: FB_ICON, view: FB, label: resourceManager.getString('resources','menu.play'), msg: 'Facebook.com' },
{ icon: GG_ICON, view: GG, label: resourceManager.getString('resources','menu.play'), msg: 'Google+' }
]);
Однако этот новый код взрывается во время выполнения, говоря, что resourceManager
нулевой.
Что я пропустил, пожалуйста?
Должен ли я инициализировать resourceManager
каким-то образом?
2 ответа
Это всего лишь предположение, но, похоже, оно имеет смысл:
Вы пытаетесь использовать ResourceManager
при инициализации ArrayCollection
, Такого рода инициализация переменных происходит при создании класса, и вполне вероятно, что у Flex недостаточно времени для выполнения всего, что он делает с вашим представлением (например, инициализация его resourceManager
имущество).
Если вы заполните свой ArrayCollection
после того, как представление отправляет событие creationComplete, вы должны быть уверены, что resourceManager
больше не является нулевым Возможно, вы можете попробовать другие события жизненного цикла Flex, которые отправляются перед "creationComplete", например "initialize", чтобы выполнить эту работу немного раньше...
Вы пропустили запятую в аргументе компилятора между кодами локали.
если вы хотите поместить свои локальные файлы в папку src, как я, вы можете добавить следующие аргументы компилятора.
-locale=en_US,fr_FR,zh_CN,pt_BR -allow-source-path-overlap=true -source-path=locale/{locale}