Изменение языковых стандартов во время выполнения с помощью ResourceManager - с тестовым примером и снимком экрана

Я пытаюсь добавить больше языков в мобильное приложение Flex и подготовил простой тестовый пример, чтобы продемонстрировать текущую проблему:

Снимок экрана:

скриншот

TestLang.mxml (просто добавьте в пустой проект в Flash Builder 4.7):

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               initialize="init()">

    <fx:Metadata>
        [ResourceBundle("resources")]
    </fx:Metadata> 

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import spark.events.IndexChangeEvent;

            [Bindable]
            private var _locales:ArrayCollection = new ArrayCollection();

            [Bindable]
            private var _numbers:ArrayCollection = new ArrayCollection();

            private function init():void {
                resourceManager.localeChain = [ 'de_DE' ];

                _locales.addItem({ locale: 'en_US', label: 'English' });
                _locales.addItem({ locale: 'ru_RU', label: 'Русский' });
                _locales.addItem({ locale: 'de_DE', label: 'Deutsch' });

                localize();
            }

            private function localize():void {
                _numbers.removeAll();
                _numbers.addItem({ label: resourceManager.getString('resources', 'menu.one') });
                _numbers.addItem({ label: resourceManager.getString('resources', 'menu.two') });
                _numbers.addItem({ label: resourceManager.getString('resources', 'menu.three') });
                _numbers.addItem({ label: resourceManager.getString('resources', 'menu.four') });
                _numbers.addItem({ label: resourceManager.getString('resources', 'menu.five') });
            }

            protected function changeLocale(event:IndexChangeEvent):void {
                var list:List = event.target as List;
                var item:Object = list.selectedItem;
                resourceManager.localeChain = [ item.str ]; // XXX
                localize();
            }

        ]]>
    </fx:Script> 

    <s:layout>
        <s:VerticalLayout />
    </s:layout>

    <s:List 
        width="100%" 
        height="50%"
        change="changeLocale(event)"
        dataProvider="{_locales}">
        <s:itemRenderer>
            <fx:Component>
                <s:IconItemRenderer labelField="label" />
            </fx:Component>
        </s:itemRenderer>
    </s:List>

    <s:List 
        width="100%" 
        height="50%"
        dataProvider="{_numbers}">
        <s:itemRenderer>
            <fx:Component>
                <s:IconItemRenderer labelField="label" />
            </fx:Component>
        </s:itemRenderer>
    </s:List>

</s:Application>

src / locale / en_US / resource.properties:

menu.one=One
menu.two=Two
menu.three=Three
menu.four=Four
menu.five=Five
menu.title=English

src / locale / de_DE / resource.properties:

menu.one=Eins
menu.two=Zwei
menu.three=Drei
menu.four=Vier
menu.five=Fünf
menu.title=Deutsch

src / locale / ru_RU / resource.properties:

menu.one=Один
menu.two=Два
menu.three=Три
menu.four=Четыре
menu.five=Пять
menu.title=Русский

В свойствах проекта я добавил Путь сборки Flex -> Путь к исходному тексту src\locale\{locale}

И аргументы компилятора Flex для -locale de_DE ru_RU en_US -allow-source-path-overlap=true

На скриншоте выше вы можете видеть, что немецкий язык изначально отображается правильно.

Но когда вы касаетесь верхнего списка для изменения языкового стандарта, нижний список становится пустым.

Почему так происходит?

Я прочитал Adobe doc и некоторые другие, но пока не смогли выяснить причину.

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


person Alexander Farber    schedule 04.06.2013    source источник


Ответы (1)


У меня была ошибка копирования-вставки! Правильная строка будет

resourceManager.localeChain = [ item.locale ];

Я решил оставить свой вопрос и этот ответ на тот случай, если кто-то ищет простой тестовый пример переключения языковых стандартов Flex во время выполнения.

person Alexander Farber    schedule 04.06.2013