zoukankan      html  css  js  c++  java
  • Flex 国际化(中英语言适配)

    原文地址:http://www.cnblogs.com/meteoric_cry/archive/2011/01/13/1934404.html(由于此贴时间久远,已做微调)

    1、新建Flex Project

    2、设置Project中的源路径,例如:locale/{locale}

     -locale en_US -locale zh_CN -source-path=locale/{locale} (复制此项内容粘贴即可,不需额外设置)

    3、新建文件夹:locale,然后在其目录下新建两个语言包文件夹:

    zh_CN

    en_US

    两个文件夹内添加一个名为info.properties(文件后缀名必须是properties,文件名随意)

    image 

    info.properties里的内容为:

    中文为:

    info=当前语言: {0}  当前的IDE是{1}  当前使用的版本是:{2}

    英文为:

    info=Current Langunage: {0} Current use IDE {1}   Version now is {2}

    image

    5、打开Flex Project的mxml主文件

    先绑定语言包

    《FB 4.6》

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

    info为语言包文件的文件名(info.properties)

    在界面添加两个按钮,点击时更改语言包设置,然后进行测试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50

    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    creationComplete="windowedapplication1_creationCompleteHandler(event)">
    <fx:Script>
    <![CDATA[
    import mx.events.FlexEvent;

    protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
    {
    // TODO Auto-generated method stub

    }

    import mx.controls.Alert;
    import mx.resources.ResourceBundle;
    import mx.resources.ResourceManager;
    import mx.utils.StringUtil;

    function show():void {
    var infoStr:String = ResourceManager.getInstance().getString("info", "info");

    var arr:Array = null;

    if (ResourceManager.getInstance().localeChain.toString() == "zh_CN") {
    arr = ['中文', 'Flash Builder', 'V2.0'];
    } else {
    arr = ["English", 'Flash Builder', 'V3.0'];
    }

    infoStr = StringUtil.substitute(infoStr, arr);

    Alert.show(infoStr, "这里是标题");
    }

    function show_CN(evt:MouseEvent):void {
    ResourceManager.getInstance().localeChain = ["zh_CN"];

    show();
    }

    function show_US(evt:MouseEvent):void {
    ResourceManager.getInstance().localeChain = ["en_US"];

    show();
    }

    ]]>
    </fx:Script>


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

    <mx:Button label="显示中文" x="339" y="230" click="show_CN(event);"></mx:Button>

    <mx:Button label="显示英文" x="339" y="280" click="show_US(event);"></mx:Button>
    </s:WindowedApplication>

    1
     
    1
     

    然后按F11,调试运行。

    最终的效果图为:

    在获取文本信息的时候,使用了flex中的字符串工具“StringUtil”包中的“substitute”方法:

    image

    《保留原创截图 上面版本号已被修改》 

    源码就是一个使用正则替换的过程:

    image

    延伸:

    路径:D:Program Files (x86)Adobe Flash Builder 4.6Adobe Flash Builder 4.6sdks4.6.0 - 18.0Airframeworkslocale

    这是Sdk 能适配的语言包,数了一下16种语言,一般的国际化需求应该满足了,如有更多需求只能考虑自行扩展了,难度、复杂性未做评估,但可行性应该是良好的。

    实现:

    function show_KO(evt:MouseEvent):void {
    ResourceManager.getInstance().localeChain = ["ko_KR"];
    show();
    }

    function show():void {
    var infoStr:String = ResourceManager.getInstance().getString("info", "info");
    var test:String = ResourceManager.getInstance().getString("info", "test");
    var str:String = ResourceManager.getInstance().getString("info","str");
    var arrayGet:Array = ResourceManager.getInstance().getStringArray("info","array");

    var arr:Array = null;

    if (ResourceManager.getInstance().localeChain.toString() == "zh_CN") {
    arr = ['中文', 'Flash Builder', 'V2.0'];
    } else if(ResourceManager.getInstance().localeChain.toString() == "en_US") {
    arr = ["English", 'Flash Builder', 'V3.0'];
    }
    else if(ResourceManager.getInstance().localeChain.toString() == "ko_KR") {
    arr = ["한국어", '안녕하세요', 'V1.5'];
    }
    infoStr = StringUtil.substitute(infoStr, arr);
    trace("获取内容",infoStr," test:"+test," str::"+str,"arrayGet::",arrayGet[1]);

    Alert.show(infoStr, "这里是标题");
    }

     
     
     
    另:很多编辑器可能无法正常显示、编辑韩文(或其它语言),以notepad++ 为例,虽然不能显示,但是粘贴或编辑的内容可以正常在程序中显示^_^。
     
     
    支持的语言:
     
    【sdk 18.0】

    da_DK 丹麦语
    de_DE 德语
    en_US 英语
    es_ES 西班牙语
    fi_FI 芬兰文
    fr_FR 法文
    it_IT 意大利
    ja_JP 日语
    ko_KR 韩语
    nb_NO 挪威文
    nl_NL 荷兰文
    pt_BR 葡萄牙语
    ru_RU 俄罗斯
    sv_SE 瑞典文
    zh_CN 简体中文
    zh_TW 繁体中文

    系统语言 检测ApI
    flash.system.Capabilities.language():String
    [只读] 指定运行内容的系统的语言代码。语言指定为 ISO 639-1 中的小写双字母语言代码。对于中文,另外使用 ISO 3166 中的大写双字母国家/地区代码,以区分简体中文和繁体中文。语言代码基于语言的英文名称:例如,hu 指定匈牙利语。

    在英文系统上,此属性仅返回语言代码 (en),而不返回国家/地区代码。在 Microsoft Windows 系统上,此属性返回用户界面 (UI) 语言,该语言指的是所有菜单、对话框、错误信息和帮助文件所使用的语言。下表列出了可能的值:

    语言
    捷克语 cs
    丹麦语 da
    荷兰语 nl
    英语 en
    芬兰语 fi
    法语 fr
    德语 de
    匈牙利语 hu
    意大利语 it
    日语 ja
    韩语 ko
    挪威语 no
    其他/未知 xu
    波兰语 pl
    葡萄牙语 pt
    俄语 ru
    简体中文 zh-CN
    西班牙语 es
    瑞典语 sv
    繁体中文 zh-TW
    土耳其语 tr

    注意:Capabilities.language 属性的值限制为此列表上可能的值。由于此限制,Adobe AIR 应用程序应使用 Capabilities.languages 数组中的第一个元素决定系统的主用户界面语言。

    服务器字符串为 L

    另请参阅:
    languages
    语言版本:
    3.0
    Player 版本:
    Flash 9, AIR 1.0, Lite 4
  • 相关阅读:
    浏览器回退
    几个小东西
    获取用户的IP
    easyui datagrid中 formatter的用法
    vscode安装go语言插件失败解决方法
    c#项目NLOG不显示日志
    C# 抽象类与接口的区别
    用SQL Server事件探查器创建跟踪
    使用MathJax在博客园里添加数学公式
    概率主题模型简介 Introduction to Probabilistic Topic Models
  • 原文地址:https://www.cnblogs.com/-yan/p/5051313.html
Copyright © 2011-2022 走看看