flex国际化  

2010-05-26 19:17:48|  分类: Flex|字号 订阅

 
 

首先还是先来看看效果吧。

1.默认的中文页面

flex+java整合的web项目国际化 - 任我行 - 任我行java博客

 

2.点击右上角的“英文”按钮,页面就切换到英文的页面。效果如下图

flex+java整合的web项目国际化 - 任我行 - 任我行java博客

 

3.点击右上角的“日文”按钮,页面就切换到日文的页面。效果如下图

flex+java整合的web项目国际化 - 任我行 - 任我行java博客

 

4.选择日文之后,登录进去查询页面。效果如下图

flex+java整合的web项目国际化 - 任我行 - 任我行java博客

 

设计思路:就是通过读取资源文件。

步骤:1.建立如下图的local文件夹和三个同名的资源文件

flex+java整合的web项目国际化 - 任我行 - 任我行java博客

 2.在flex complier中加如下信息

-locale zh_CN en_US ja_JP  -source-path+=E:\workspace\eoso\locale\{locale}。+=后面是你工程的路径

3.在flex build path中新建文件夹 内容是locale/{locale}

4.在WEB-INF/flex/local目录上新建两个文件夹。名为ja_JP,zh_CN。名字必须这样。(这一步非常重要,不然,你会遇到can't open ja_JP什么的问题)

4.ok,就最后一步了,在代码中引用。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
   width="100%" 
   height="100%"  
   creationCompleteEffect="{wipeUp}"
   xmlns:ns1="page.orderManagement.*"
   layout="absolute" 
   backgroundGradientAlphas="[1.0, 1.0]" 
   backgroundGradientColors="[#5769F1, #EEF4D8]"
   creationComplete="this.initApp()">
    <mx:Metadata> 
        [ResourceBundle("rs")] 
     </mx:Metadata> 

 <mx:WipeUp id="wipeUp" duration="1000" />
 <mx:states>
  <mx:State name="main">
   <mx:SetStyle name="backgroundGradientColors" value="[#7BBBF8, #EEF4D8]"/>
   <mx:RemoveChild target="{panel0}"/>
   <mx:RemoveChild target="{text1}"/>
   <mx:RemoveChild target="{hboxLanguage}"/>
   <mx:AddChild position="lastChild">
    <mx:LinkButton x="904" y="3"  label="{resourceManager.getString('rs', 'Exit')}" click="this.userLogout();"/>
   </mx:AddChild>
   <mx:AddChild position="lastChild">
    <mx:Canvas horizontalCenter="0" verticalCenter="13" width="960" height="580" backgroundColor="#FFFFFF">
     <ns1:orderQuery  id="orderQuery"   width="100%" height="100%"/>
    </mx:Canvas>
   </mx:AddChild>
   <mx:RemoveChild target="{message}"/>
  </mx:State>
 </mx:states>
 <mx:Style>

  
  Application { 
   fontSize:14pt;
  }
  ToolTip{
   fontSize:14pt;
  }
 </mx:Style>
 <mx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.containers.Panel;
   import mx.controls.Image;
   import service.Session;
   import model.User;
  
      import service.CommonService;
  
  private function initApp():void{
     this.lblCheckCode.label=GenerateCheckCode();
     this.addEventListener(KeyboardEvent.KEY_DOWN,this.sendMessageUseEnterKey);
     //得到用户电脑当前分辨率
     var x:Number=Capabilities.screenResolutionX;
     var y:Number=Capabilities.screenResolutionY;
     if(x!=1024||y!=768)
     {
        var userDPI:String= x+"×"+y;
        this.message.visible=true;
        this.message.text=resourceManager.getString('rs', 'eoso_message1')+userDPI
        +"\n"+resourceManager.getString('rs', 'eoso_message2')+":1024×768";
     }
  }

     //用户登录 
        private function userLogin():void
        {
           if(this.txt_UserName.text==null||this.txt_UserName.text=="")
           {
              this.tip.text=resourceManager.getString('rs', 'eoso_message3');
              return;
           }
           else if(this.textInputPassword.text==null||this.textInputPassword.text=="")
           {
              this.tip.text=resourceManager.getString('rs', 'eoso_message12');
              return;
           } 
           else if(this.txtCheckCode.text==null||this.txtCheckCode.text=="")
           {
              this.tip.text=resourceManager.getString('rs', 'eoso_message4');
              return;
           } 
           else if(this.txtCheckCode.text.toLocaleLowerCase()!=this.lblCheckCode.label.toLocaleLowerCase())
           {
             //验证码不正确!
              this.tip.text=resourceManager.getString('rs', 'eoso_message5');
              return;
           } 
           else{
            var commonService:CommonService = new CommonService();
            commonService.Login(this.txt_UserName.text,this.textInputPassword.text,this);
           }
        }
       //用户登录 回调
        public function loginSuccess(user:User):void
        {
      this.currentState='main';
        }
        //重置
        private function btnReset_clickHandler(event:MouseEvent):void{
           this.txt_UserName.text=null;
           this.textInputPassword.text=null;
           this.tip.text=null;
        }
       private function userLogout():void
          {
           Session.currentUser=null;
           navigateToURL(new URLRequest("/eoso/eoso.html"), "_self"); 
          }
          
         private function GenerateCheckCode():String{
     var ran:Number;
     var number:Number;
     var code:String;
     var checkcode:String="";
     //生成四为随机数
     for(var i:int=0;i<4;i++){
         ran=Math.random();
         number=Math.round(ran*1000);
         if(number%2==0)
         code=String.fromCharCode(48+(number%10));
      else
      code=String.fromCharCode(65+(number%26));
      checkcode+=code;
        }
   
        return checkcode; 
         }

   /*监听回车键 */
   private function sendMessageUseEnterKey(evt:KeyboardEvent):void
   {
    if(evt.keyCode==13)
    {
     this.userLogin();
      }
     }
 
  ]]>
 </mx:Script>

  <mx:HBox x="723" y="10" color="white" id="hboxLanguage"> 
     <mx:LinkButton label="中  文" 
         click="resourceManager.localeChain = ['zh_CN']" /> 
     <mx:LinkButton label="English"  
         click="resourceManager.localeChain = ['en_US']" /> 
     <mx:LinkButton label="日本語" 
         click="resourceManager.localeChain = ['ja_JP']" /> 
  </mx:HBox> 
  <mx:Text  text="{resourceManager.getString('rs', 'EOSSystem')}" fontSize="40" width="281" height="50" id="text1" horizontalCenter="0" verticalCenter="-200"/>
  <mx:Panel width="310" height="240" layout="absolute"  titleIcon="@Embed('p_w_picpath/logo.gif')" title="{resourceManager.getString('rs', 'Welcome')}" id="panel0" backgroundColor="#7BBBF8" backgroundAlpha="0.29" borderColor="#C9EFB0" cornerRadius="20" alpha="1.0"  verticalCenter="5" horizontalCenter="0"> 
  
  <mx:Label id="formitem0" textAlign="right" text="{resourceManager.getString('rs', 'username')}"   x="5" y="37" width="100"/>
  <mx:TextInput id="txt_UserName" text="SUPP001"  x="112" y="36" tabIndex="1"/>
  <mx:Label id="password" textAlign="right" text="{resourceManager.getString('rs', 'password')}" x="5" y="77" width="100"/>
  <mx:TextInput id="textInputPassword" text="SUPP001" tabIndex="2" displayAsPassword="true" x="112" y="75"/>
  <mx:Button id="btnReset0" width="85" label="{resourceManager.getString('rs', 'Reset')}" tabIndex="5" click="btnReset_clickHandler(event)" cornerRadius="13" x="156" y="160"/>
  <mx:Button id="login_btn0" width="85" label="{resourceManager.getString('rs', 'OK')}" tabIndex="4" toolTip="{resourceManager.getString('rs', 'eoso_message')}" click="this.userLogin()" cornerRadius="13"  x="57" y="160"/>
  <mx:Label id="tip" color="red" x="53" y="5"/>
  <mx:Label x="4" y="120" textAlign="right"  text="{resourceManager.getString('rs', 'AuthenticationCode')}" width="100"/>
  <mx:TextInput x="112" y="118" width="71" tabIndex="3" id="txtCheckCode" maxChars="4" />
  <mx:LinkButton x="191" y="118" toolTip="{resourceManager.getString('rs', 'eoso_message6')}"  width="71"  id="lblCheckCode" click="this.lblCheckCode.label=GenerateCheckCode();" fontSize="13" height="25"/>
  
  </mx:Panel>

  <mx:Text id="message" visible="false" verticalCenter="200" horizontalCenter="0" text="&#xa;"/>
</mx:Application>
注意蓝色部分。rs是资源文件名,后面一个是Key。怎么样。比较简单吧!

当然也遇到一些问题:

1.由于各国语言的长度不同,导致对齐是个问题,费了很大的功夫才保证了页面的美观。

2.本文所讲的国际化其实并不是完整的国际化。因为国际化并不仅仅指语言的国际化。还有其他很多方面要考虑。比如,日期的显示因国家不同而不同。欧美是月日年,中国是年月日。这一点足以说明国际化远非就是语言之间对等的翻译和切换。