{"id":13742727,"url":"https://github.com/BabelFx/AS3-Flex-Library","last_synced_at":"2025-05-09T00:31:37.675Z","repository":{"id":821748,"uuid":"535086","full_name":"BabelFx/AS3-Flex-Library","owner":"BabelFx","description":"BabelFx localization (l10n) library implemented as extensions to the Flex Swiz IoC framework (v1.x)","archived":true,"fork":false,"pushed_at":"2018-04-12T22:11:33.000Z","size":14224,"stargazers_count":40,"open_issues_count":5,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-15T13:39:31.820Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"ActionScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BabelFx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2010-02-25T03:34:58.000Z","updated_at":"2022-11-26T21:14:10.000Z","dependencies_parsed_at":"2022-08-16T11:00:47.974Z","dependency_job_id":null,"html_url":"https://github.com/BabelFx/AS3-Flex-Library","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BabelFx%2FAS3-Flex-Library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BabelFx%2FAS3-Flex-Library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BabelFx%2FAS3-Flex-Library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BabelFx%2FAS3-Flex-Library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BabelFx","download_url":"https://codeload.github.com/BabelFx/AS3-Flex-Library/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253170980,"owners_count":21865273,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T05:00:35.492Z","updated_at":"2025-05-09T00:31:36.848Z","avatar_url":"https://github.com/BabelFx.png","language":"ActionScript","readme":"![babelfx_landingpage](https://user-images.githubusercontent.com/210413/32693897-9bb09318-c6f8-11e7-8ac3-7bdd5dbcb796.jpg)\n\nBabelFx (v2.0)\n====================\n\u003cbr/\u003e\nThe BabelFx Localization library (version 2.0) has been completely rewritten and is now implemented as an extension(s) to the Swiz v1.x IoC framework. As such this version 2.x of BabelFx requires that the Swiz library be included as the core MVC/IoC framework.\n\nUnlike previous versions, BabelFx v2 no longer uses a proprietary bean-detection engine nor does it require a custom LocaleMap class to be defined and instantiated. In this version of the localization engine/library, developers simply define metadata tags (ala AOP) within any class in which they want l10n injection to occur. Theses metadata tags specify injection directives and can be used to inject localized content into **any** object instance (UIComponent or other non-ui instances). \n\nThe BabelFx localization engine does not care about the type of data to be injected; BabelFx will inject into all target/bean instances whenever (1) the locale changes, (2) view states change, or (3) injection parameter values change. Not only can localized text be *auto-magically* injected, but also stylesheets, styles, fonts, images, xml, byte data, and more.  \n\nBabelFx only focuses on `where to inject` and `when to inject`! \n\n![l10ninjection process](https://user-images.githubusercontent.com/210413/38706877-7e443e6c-3e74-11e8-9465-dfbd832eb99b.png)\n\n\n\n\u003cbr/\u003e\nTo use BabelFx v2 and add localication (l10n) support to your application, you must:\n\n* Use the Swiz 1.3 (or greater) IoC Framework\n* Include Framework_Swiz_BabelFx.swc in your projects library dependencies\n* Configure your Swiz setup to use BabelFx\n* Configure your application code\n\n\u0026nbsp;\u0026nbsp; Important!!\u0026nbsp;\u0026nbsp; \n\n    BabelFx v2 will only work as an extension to the Swiz Framework (v1.3 or greater).\n\n\n## 1.1 Configure your Swiz setup: #\n\n\u003cbr/\u003e\nTo configure Swiz to use BabelFx Localization, simply register the `BabelFxProcess` and the event packages:\n\n```mxml\n\t\u003csw:Swiz  xmlns:sw=\"http://swiz.swizframework.org\" \u003e\n\t\t\n\t\t\u003csw:config\u003e\n\t\t\t\u003csw:SwizConfig \t\t \n\t\t\t\t id=\"appConfig\"\n\t\t\t\t strict=\"true\"\n\t\t\t\t eventPackages=\"ext.babelfx.events.*,...\" \n\t\t\t\t viewPackages=\"…\"\n\t\t\t\t defaultFaultHandler=\"{genericFault}\"/\u003e\n\t\t\u003c/sw:config\u003e\n\t\n\t\t\u003csw:customProcessors\u003e\n\t\n\t\t\t\u003cbfx:BabelFxProcessor xmlns:bfx=\"http://swiz.babelfx.org/\"/\u003e\n\t\t\t\n\t\t\u003c/sw:customProcessors\u003e\n\t\t\n\t\u003c/sw:Swiz\u003e\n```\n\n\u0026nbsp;\u003cbr/\u003e\nNote: that your application project **must** include the following compiler argument:\n\n    -keep-as3-metadata+=\"BabelFx\"\n\nThis argument forces the compiler to include the [BabelFx()] metadata tags in the compiled bytecode… tags that are read during runtime by the BabelFxProcessor within the Swiz engine.\n\u0026nbsp;\u003cbr/\u003e\n\n## 1.2 Configure your Application code:  #\n\nLet's assume that the either (1) resources have been embedded into the application bytecode or (2) an `ExternalLocaleCommand` has been configured to dynamically load the external resource bundles at runtime. \n\nThen the only remaining task required to completely localize your application is to define [BabelFx()] metadata tags that should be added to any desired view classes or registered controllers and models. \n\nDevelopers now implement these tags within class definitions (instead of within a LocalizationMap). Best of all is the fact that **any** class can now use these tags to defined l10n injections; UIComponents, Controllers, Models, Constants, etc. all can define BabelFx injections.\n\nNon-UIComponent instances must be registered, of course, with Swiz; registration can be achieved as tag instances defined within a `BeanProvider` or by dynamically registering an instance via `BeanEvent.SETUP_BEAN` events.\n\nTo inject localized content into a view, simply use the `[BabelFx( )]` metadata tag:\n\u003cbr/\u003e\u0026nbsp;\n\n```mxml\n\t\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\t\u003cs:Group xmlns:fx=\"http://ns.adobe.com/mxml/2009\"\n\t\t\t xmlns:s=\"library://ns.adobe.com/flex/spark\"\n\t\t\t xmlns:mx=\"library://ns.adobe.com/flex/mx\"\n\t\t\t currentState=\"{ model.currentState }\"\u003e\n\t\n\t\t\u003cfx:Metadata\u003e\n\t\t\t\n\t\t\t[BabelFx ( bundleName=\"login\" )]\n\t\t\t       \n\t\t\t[BabelFx (  property=\"fiUserName.label\", key=\"login.form.fiUserName\" )]\n\t\t\t[BabelFx (  property=\"fiPassword.label\", key=\"login.form.fiPassword\" )]\n\t\t\t[BabelFx (  property=\"loginBtn.label\",   key=\"login.submit\"          )]\n\t\t\t[BabelFx (  property=\"lblHint.text\",     key=\"login.tip\"             )]\n\t\t\t[BabelFx (  property=\"loginBtn.backgroundColor\", key=\"content.frame.color\" )]\n\t\t\t\n\t\t\u003c/fx:Metadata\u003e\n\t\t\t\n\t\t\u003cmx:Form id=\"loginForm\"\twidth=\"100%\" verticalGap=\"15\"\u003e\n\t\t\t\u003cmx:FormItem id=\"fiUserName\" label=\"Username:\" required=\"true\" height=\"25\"\u003e\n\t\t\t\t\u003cs:TextInput id=\"username\" width=\"200\" height=\"25\" \n\t\t\t\t\t\t\t text=\"{ model.lastUsername }\"\n\t\t\t\t\t\t\t errorString=\"{model.usernameError}\"\n\t\t\t\t\t\t\t enter=\"login()\"/\u003e\n\t\t\t\u003c/mx:FormItem\u003e\n\t\t\t\u003cmx:FormItem id=\"fiPassword\"  label=\"Password:\" required=\"true\" height=\"25\"\u003e\n\t\t\t\t\u003cs:TextInput id=\"password\"\n\t\t\t\t\t\t\t width=\"200\" height=\"25\"\n\t\t\t\t\t\t\t errorString=\"{ model.passwordError }\"\n\t\t\t\t\t\t\t displayAsPassword=\"true\"\n\t\t\t\t\t\t\t text=\"{ model.password }\"\n\t\t\t\t\t\t\t enter=\"login()\"/\u003e\n\t\t\t\u003c/mx:FormItem\u003e\n\t\t\t\u003cmx:FormItem\u003e\n\t\t\t\t\u003cs:Button id=\"loginBtn\" \n\t\t\t\t\t\t  width=\"120\" height=\"40\"\n\t\t\t\t\t\t  styleName=\"mainButton\"\n\t\t\t\t\t\t  label=\"Login\"\n\t\t\t\t\t\t  enabled=\"{ !model.loginPending }\"\n\t\t\t\t\t\t  click=\"login();\"/\u003e\n\t\t\t\u003c/mx:FormItem\u003e\n\t\t\t\u003cmx:FormItem\u003e\n\t\t\t\t\u003cs:Label id=\"lblHint\" \n\t\t\t\t\t\t fontSize=\"13\"\n\t\t\t\t\t\t text=\"( Username: Flex   Password: Swiz )\"/\u003e\n\t\t\t\u003c/mx:FormItem\u003e\n\t\t\u003c/mx:Form\u003e\n\t\n\t\u003c/s:Group\u003e\n```\n\n\u003cbr/\u003e\nFor non-UIComponents, BabelFx injections are equally as versatile and powerful. Consider the Feedback model class below:\n\n```actionscript\t\n\tpackage com.companyx.productY.model\n\t{\n\t    import flash.events.Event;\n\t\n\t    import mx.collections.ArrayList;\n\t    import mx.events.PropertyChangeEvent;\n\t\n\t    // ***************************************************\n\t    // Metadata for Localization Injection\n\t    // ***************************************************\n\t\n\t\t    [BabelFx(bundle=\"header\")]\n\t\t\n\t\t    // Inject directly into arraylist items...\n\t\t    \n\t\t    [BabelFx(property = \"dataProvider[0].label\", key = \"feedbackItem\")]\n\t\t    [BabelFx(property = \"dataProvider[1].label\", key = \"problemsItem\")]\n\t\t    [BabelFx(property = \"dataProvider[2].label\", key = \"accountItem\")]\n\t\t    [BabelFx(property = \"dataProvider[3].label\", key = \"preferencesItem\")]\n\t\t    [BabelFx(property = \"dataProvider[4].label\", key = \"internetItem\")]\n\t\t    [BabelFx(property = \"dataProvider[5].label\", key = \"helpItem\")]\n\t\t    [BabelFx(property = \"dataProvider[6].label\", key = \"mediaTourItem\")]\n\t\t    [BabelFx(property = \"dataProvider[7].label\", key = \"logoutItem\")]\n\t\t\n\t\t    [BabelFx(property = \"submenu1.label\", key = \"submenu1Item\")]\n\t\t    [BabelFx(property = \"submenu2.label\", key = \"submenu2Item\")]\n\t\n\t\n\t\n\t    [Bindable]\n\t    /**\n\t     * Special `constants` model with properties that are localized dynamically.\n\t     * This will trigger databindings and then update dependent UI components.\n\t     *\n\t     */\n\t    public class Feedback\n\t    {\n\t        // ***************************************************\n\t        // Public Constants\t\t\n\t        // ***************************************************\n\t\n\t        public const GIVE_FEEDBACK  :String = \"feedback\";\n\t        public const REPORT_PROBLEM :String = \"report\";\n\t        public const MY_ACCOUNT     :String = \"account\";\n\t        public const PREFERENCES    :String = \"preferences\";\n\t        public const ADD_INTERNET   :String = \"internetradio\";\n\t        public const HELP           :String = \"faqs\";\n\t        public const MEDIA_TOUR     :String = \"tour\";\n\t        public const LOGOUT         :String = \"logout\";\n\t        public const AUTO_PLAY      :String = \"submenu1\";\n\t        public const SMART_TUNE     :String = \"submenu2\";\n\t\n\t\n\t        // ***************************************************\n\t        // Public Properties\n\t        // ***************************************************\n\t\n\t        /**\n\t         * DataProvider for any UI control that needs a list of FeedbackMenuItems \n\t         * with localized content always auto-synchronized with the current locale.\n\t         */\n\t        public var dataProvider:ArrayList;\n\t\n\t        /**\n\t         * Sub-menu item exposed for l10n injection\n\t         */\n\t        public var submenu1:FeedbackMenuItem;\n\t\n\t        /**\n\t         * Sub-menu item exposed for l10n injection\n\t         */\n\t        public var submenu2:FeedbackMenuItem;\n\t\n\t\n\t         // ***************************************************\n\t        // Constructor\n\t        // ***************************************************\n\t\n\t        public function Feedback()\n\t        {\n\t            submenu1 = new FeedbackMenuItem(\"\", AUTO_PLAY);\n\t            submenu2 = new FeedbackMenuItem(\"\", SMART_TUNE);\n\t\n\t            dataProvider = new ArrayList();\n\t\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", GIVE_FEEDBACK));\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", REPORT_PROBLEM));\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", MY_ACCOUNT));\n\t\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", \"\", [ submenu1, submenu2 ]));\n\t\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", ADD_INTERNET));\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", HELP));\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", MEDIA_TOUR));\n\t            dataProvider.addItem(new FeedbackMenuItem(\"\", LOGOUT));\n\t        }\n\t\n\t    }\n\t}\n```\n\n## 1.3 Understanding the [BabelFx(\u0026nbsp;)] Process ##\n\n\u003cbr/\u003e\nWhen configured, the BabelFx localization engine is silently activated simply by the additiono of a special BabelFxProcessor that has been added to Swiz's array of metadata scanners (see 1.1 above).\n\nThe `BabelFxProcessor` will scan all beans instances for [BabelFx( )] or [l10n( )] metadata tags. \n\nAs needed, the processor will silently construct ResourceInjector and ResourceSetter instances and store those instances in a hidden `LocalizationMap` instance. The `BabelFxProcessor` will also auto-scan and configure l10n injections for any DisplayObjects instances as they are dynamically `addedToStage`.\n\nUsing the hidden, registered ResourceInjectors, the BabelFx localization engine will inject into all target/bean instances whenever (1) the locale changes, (2) view states change, or (3) injection parameter values change. \n\n\nThe `[BabelFx( )]` tag can use the following attributes:\n\n```actionscript\n\t[BabelFx( property=\"\", key=\"\", parameters=\"\", state=\"\", bundleName=\"\" )]\n\t[BabelFx( bundleName=\"\" )]  or [BabelFx( \"\u003cbundleName\u003e\" )]\n\t[BabelFx( event=\"\", handler=\"\" )]\n```\n\n## 1.4 When auto-inject is not enough… ##\n\n\u003cbr/\u003e\nOften, more complex logic must be also used to determine how some of the localized content should be used within components. In such cases, simply injection does not suffice. \n\nBabelFx supports this feature using the `[BabelFx( event=\"\" )]` metadata tag. Unlike the other tags (above) which are defined outside the class, this tag is defined adjacent to the public function that should be invoked; used in the same manner as the `[EventHandler( )]` tag.\n\n```actionscript\n\t\t[BabelFx(event=\"BabelFxEvent.*\")]\n\t\t/**\n\t\t *  Called by BabelFx engine after locale changes and injections into `this` instance have finished.\n\t\t */\n\t\tpublic function onLocaleChanged():void\n\t\t{\n\t\t\tbtnCancel.label   = resourceManager.getString('header', (model.signupMode ? 'fullSignup' : 'miniSignup'));\n\t\t\tbtnCancel.toolTip = model.allowCancel ? '' : resourceManager.getString('header', 'cancelNotAllowedMsg');\n\t\t\tbtnNext.label     = resourceManager.getString('header', 'next').toLocaleUpperCase();\n\t\t}\n```\n\nDevelopers should note that `[BabelFx( )]` is the same as `[BabelFx(event=\"BabelFxEvent.*\")]`. This notation means that for any event within BabelFx, then the associated function should be called for the following event types:\n\t\n```actionscript\n\t\tpublic static const INITIALIZED     :String = \"initialized\";\n\t\tpublic static const LOCALE_CHANGING\t:String = \"localeChanging\";\n\t\tpublic static const LOCALE_CHANGED  :String = \"localeChanged\";\n\t\t\n\t\tpublic static const STATE_CHANGED   :String = \"stateChanged\";\n\t\tpublic static const TARGET_READY    :String = \"creationComplete\";\n\t\tpublic static const PARAMS_CHANGED  :String = \"parametersChanged\"\n```\n\nIf the function handler should only be called during locale changes, then simply define the metadata tag as the following:\n\n```actionscript\n\t[BabelFx(event=\"BabelFxEvent.LOCALE_CHANGED\")]\n```\n\nThis extra directive then instructs BabelFx to filter the events and to optimize the function handler invocation for events of only that specific type.\n\n\u0026nbsp;\u003cbr/\u003e\nAdditionally, developers can use the powerful BabelFxUtils to simplify the above code. \n\n```actionscript\n\t[BabelFx(event = \"BabelFxEvent.LOCALE_CHANGED\")]\n\tpublic function onLocaleChanged():void \n\t{\n\t\tvar lookup:Function = BabelFxUtils.getLookup('header');\n\t\tvar filter:Function = function(val:String):String{ return val.toUpperCase(); };\n\t\n\t\tbtnCancel.label   = lookup( model.signupMode ? 'fullSignup' : 'miniSignup' );\n\t\tbtnCancel.toolTip = model.canContinue ? '' : lookup( 'whyLockedMsg' );\n\t\tbtnNext.label     = lookup ( 'next', filter );\n\t}\n```\n\nNotice how all references to ResourceManager are removed. The 'lookup` function is essentially a short-cut alias to the ResourceManager.get\u003cXXXX\u003e( ) methods.\n\n\u0026nbsp;\u003cbr/\u003e\n\n## 1.5 Debugging BabelFx Injections ##\n\n\u003cbr/\u003e\nSimply add the `\u003cSwizTraceTarget /\u003e` instance to your Swiz setup and insure that the filter includes the BabelFx packages. e.g.\n\n```mxml\n\t\u003csw:Swiz  xmlns:sw=\"http://swiz.swizframework.org\" \u003e\n\t\t\n\t\t\u003csw:loggingTargets\u003e\n\t\t\t\u003c!-- \n\t\t\t    SwizTraceTarget with filter enables log.debug() output for BabelFx \n\t\t\t--\u003e\n\t\t\t\u003csw:SwizTraceTarget id=\"babelfxConsole\" filters=\"ext.babelfx.*\" /\u003e\n\t\t\u003c/sw:loggingTargets\u003e\n\t\t\n\t\u003c/sw:Swiz\u003e\n```\n\nWhen your application starts, the BabelFxProcess will parse all metadata tags, prepare injectors, and the fire the injectors. As BabelFx executes, it will log debug output to the console. Shown below is a sample log output:\n\n```ruby\n\tLocaleCommand::loadDefaultLocale( `en_US` )\n\tLocalizationMap::fireInjectors( ids=`1,2,3,4,5` )\n\n\t\tResourceInjector[1] :: execute( com.model.constants::LoginConstants - why=`null` - 8 mappings )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`FORGOT_PASSWORD` value=`Forgot Password: ` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`GUEST` value=`Guest` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`OR` value=`or ` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`SUBSCRIBER` value=`Subscriber` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`TO_PART_ONE` value=`By clicking \"Login and Listen Now\", I agree that I have read and agree to the CompanyX ` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`CUSTOMER_AGREEMENT` value=`Customer Agreement` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`PRIVACY_POLICY` value=`Privacy Policy` state=`` )\n\t\tResourceInjector[1] ::: inject( ui=`com.model.constants::LoginConstants` property=`TO_PART_TWO` value=`, and certify that I am at least 18 years of age.` state=`` )\n\n\t\tResourceInjector[2] :: execute( com.model::LanguagesModel - why=`null` - 4 mappings )\n\t\tResourceInjector[2] ::: inject( ui=`com.model::LanguagesModel` property=`dataProvider[0].label` value=`English` state=`` )\n\t\tResourceInjector[2] ::: inject( ui=`com.model::LanguagesModel` property=`dataProvider[1].label` value=`Spanish` state=`` )\n\t\tResourceInjector[2] ::: inject( ui=`com.model::LanguagesModel` property=`dataProvider[2].label` value=`Canadian English` state=`` )\n\t\tResourceInjector[2] ::: inject( ui=`com.model::LanguagesModel` property=`dataProvider[3].label` value=`Canadian French ` state=`` )\n\t\tResourceInjector[2] :: [BabelFx( event=`localeChanged` )] on com.model::LanguagesModel::onUpdateLocale()\n\n\n\t\tResourceInjector[3] :: execute( com.model::FeedbackModel - why=`null` - 10 mappings )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[0].label` value=`Tell Us What You Think` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[1].label` value=`Report A Problem` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[2].label` value=`My Account` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[3].label` value=`Player Preferences` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[4].label` value=`Add Internet Listening` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[5].label` value=`Help/FAQs` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[6].label` value=`Web Player Tour` state=`` )\n\t\tResourceInjector[3] ::: inject( ui=`com.model::FeedbackModel` property=`dataProvider[7].label` value=`Log Out` state=`` )\n\n\t\tResourceInjector[5] :: execute( com.model.presentation::ChannelsPresentationModel - why=`null` - 0 mappings )\n\n\tLocalizationMap::fireInjectors( ids=`6` )\n\n\t\tResourceInjector[6] :: execute( com.view.login::LoginPanel - why=`null` - 3 mappings )\n\t\tResourceInjector[6] ::: inject( ui=`com.view.login::LoginPanel` property=`lblSubscribers.text` value=` Subscribers` state=`` )\n\t\tResourceInjector[6] ::: inject( ui=`com.view.login::LoginPanel` property=`lblTitle.text` value=`Product Z` state=`` )\n\t\tResourceInjector[6] ::: inject( ui=`com.view.login::LoginPanel` property=`lblSuggestLogin.text` value=`Log In \u0026 Listen` state=`` )\n\n\tLocalizationMap::fireInjectors( ids=`7` )\n\n\t\tResourceInjector[7] :: execute( com.view.login::LoginPanelLeft - why=`null` - 4 mappings )\n\t\tResourceInjector[7] ::: inject( ui=`com.view.login::LoginPanelLeft` property=`userName.prompt` value=`Username: CompanyX` state=`` )\n\t\tResourceInjector[7] ::: inject( ui=`com.view.login::LoginPanelLeft` property=`password.prompt` value=`Password: CompanyX` state=`` )\n\t\tResourceInjector[7] ::: inject( ui=`com.view.login::LoginPanelLeft` property=`rememberMeCheckbox.label` value=`Remember Me` state=`` )\n\t\tResourceInjector[7] ::: inject( ui=`com.view.login::LoginPanelLeft` property=`loginButton.label` value=`Log In \u0026 Listen` state=`` )\n\t\tResourceInjector[7] :: [BabelFx( event=`localeChanged` )] on com.view.login::LoginPanelLeft::onLocaleChanged()\n\t\t\n\t\t_\n```\t\t\n\t\t\n\nThis log output makes it trivial to identify any [BabelFx()] tags that are incorrect or not working.\n\n## 1.6 Demo Application ##\n\n\u003cbr/\u003e\nThe BabelFx sample application [CafeTownsend with Swiz](https://github.com/BabelFx/AS3-Flex-Samples/commit/82287d144eda045c22d57b730ede5dca6c4e3b33) has been updated to use the new BabelFx-for-Swiz library.\n\nDevelopers are also directed to \n\n*  [Getting Started with BabelFx](http://www.gridlinked.info/gettingstarted-with-babelfx/)\n*  [Learning BabelFx: Video Tutorial](http://www.gridlinked.info/flex-i18n-with-localizationmaps-video-tutorial-source/)\n*  [BabelFx Home](http://www.babelfx.org)\n","funding_links":[],"categories":["User Interface"],"sub_categories":["Flex Components"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBabelFx%2FAS3-Flex-Library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBabelFx%2FAS3-Flex-Library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBabelFx%2FAS3-Flex-Library/lists"}