2013-06-04 2 views
0
내가 플렉스 모바일 앱에 더 많은 로케일을 추가하기 위해 노력하고있어 문제를 보여주기 위해 간단한 테스트 케이스를 준비했습니다

와 내가 현재 가지고 :변경 로케일 - 테스트 케이스 및 스크린 샷

스크린 샷 :

screenshot

TestLang.mxml은 (단지 플래시 빌더 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/로케일/ko 페이지/resource.properties :

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

SRC/로케일/DE_DE/resource.properties :

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

SRC/로케일/ru_RU/자원 . 속성 :

menu.one=Один 
menu.two=Два 
menu.three=Три 
menu.four=Четыре 
menu.five=Пять 
menu.title=Русский 
> 소스 경로 src\locale\{locale}

의 그리고 스크린 샷에 -locale de_DE ru_RU en_US -allow-source-path-overlap=true

플렉스 컴파일러 인수 당신이 독일어 로케일이 표시되는 것을 볼 수 있습니다 위 - 나는 플렉스 빌드 경로 추가 한 프로젝트 속성에서 363,210

제대로 초기에.

그러나 위 목록을 터치하여 로캘을 변경하면 아래쪽 목록이 비게됩니다.

왜 이런 일이 발생합니까?

나는 Adobe 문서 Changing locales at run time with the ResourceManager 및 그 외 일부를 읽었지만 아직 원인을 파악하지 못했습니다.

resourceManager.localeChain에 새 배열이 할당되면 로케일 전환이 동 기적으로 발생합니까 아니면 일부 이벤트를 수신해야합니까?

답변

0

복사 - 붙여 넣기 오류가 발생했습니다. 내 질문을 유지하기로 결정했습니다 및 사례 사람이 대답은 런타임시 플렉스 로케일을 전환하는 간단한 테스트 케이스를 찾고 있습니다

resourceManager.localeChain = [ item.locale ]; 

올바른 라인이 될 것이다.

관련 문제