Попытка добавить локали в мобильное приложение 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}
Другие вопросы по тегам