1

I have a script for multi-language-use working when added to the first frame of a timeline. However, when I try to adapt it to work in an external .as script, it throws a TypeError and I can't figure out why.

Here is the code that works in a timeline:

import fl.data.DataProvider;
import fl.text.TLFTextField;
import flash.text.Font;
import flashx.textLayout.elements.*;
import flashx.textLayout.formats.*;

//------------------
// CREATE TLFTEXTFIELD:

var field_001:TLFTextField = new TLFTextField();
field_001.x = 20;
field_001.y = 50;
field_001.width = 342
field_001.height = 54;
field_001.background = true;
addChild(field_001); 

// Create text format
var format:TextLayoutFormat = new TextLayoutFormat();
format.fontFamily = "Arial";
format.fontSize = 36;
format.color = 0x666666;

// Apply the format
var textFlow:TextFlow = field_001.textFlow;
textFlow.hostFormat = format;

//------------------
// SETUP LOCALE OBJECT:

var languages:Object = new Object();    // Stores flags for loaded languages
var localeDefault:String = "ar";        // Default language
var locale:String = "ar";              // Current language selected in combobox

// Event handler for Locale object
function localeLoadedHandler(success:Boolean):void 
{
    if( success )
{
        // Mark language as loaded and show localized string
        languages[locale] = true;
        field_001.text = Locale.loadStringEx("IDS_FIRSTFIELD", locale);
                // field_002 is a field already on stage
        field_002.text = Locale.loadStringEx("IDS_SECONDFIELD", locale);
    }
}    
// Load the default language...
Locale.setDefaultLang(localeDefault);
Locale.setLoadCallback(localeLoadedHandler);
trace("Locale.getDefaultLang() is: " + Locale.getDefaultLang());
Locale.loadLanguageXML(Locale.getDefaultLang());

Here is my adaptation to an external script and set up as the class for a standalone swf called "tempchild.swf" I want to open inside a parent swf at a later time:

package com.marsinc {

import fl.text.TLFTextField;
import flash.text.Font;
import flashx.textLayout.elements.*;
import flashx.textLayout.formats.*;
import flash.display.MovieClip;
import fl.lang.Locale;

public class tempchild extends MovieClip {

    //------------------
    // SETUP LOCALE OBJECT:

    private var languages:Object;           // Stores flags for loaded languages
    private var localeDefault:String;       // Default language
    private var locale:String;          // Current language selected in combobox
    private var field_001:TLFTextField;
    private var format:TextLayoutFormat;

    public function tempchild() 
    {
        // constructor code
        languages = new Object();
        localeDefault = "es";   
        locale = "es";

        //------------------
        // CREATE TLFTEXTFIELD:

        field_001 = new TLFTextField();
        field_001.x = 20;
        field_001.y = 50;
        field_001.width = 342
        field_001.height = 54;
        field_001.background = true;
        addChild(field_001); 

        // Create text format
        format = new TextLayoutFormat();
        format.fontFamily = "Arial";
        format.fontSize = 36;
        format.color = 0x666666;

        // Apply the format
        var textFlow:TextFlow = field_001.textFlow;
        textFlow.hostFormat = format;

        // Load the default language...
        Locale.setDefaultLang(localeDefault);
        Locale.setLoadCallback(localeLoadedHandler);
        trace("Locale.getDefaultLang() is: " + Locale.getDefaultLang()); // displays "es"
        Locale.loadLanguageXML(Locale.getDefaultLang()); // this line returns an error
    }


    // Event handler for Locale object
    private function localeLoadedHandler(success:Boolean):void 
    {

        trace("running the loaded handler");
        if( success )
        {
            // Mark language as loaded and show localized string
            languages[locale] = true;
            field_001.text = Locale.loadStringEx("IDS_FIRSTFIELD", locale);
            //field_002.text = Locale.loadStringEx("IDS_SECONDFIELD", locale);
        }
    }    


}

And this is the error in the output window:

TypeError: Error #1010: A term is undefined and has no properties.

at fl.lang::Locale$/loadXML()

at fl.lang::Locale$/loadLanguageXML()

at com.marsinc::tempchild()

Been digging around for an answer for a couple days now and I am stuck. Any help is greatly appreciated. Thanks!

--Kevin

Kevin Hays
  • 33
  • 5
  • Hi Folks, No reply to this one so I'm hoping to shake the tree again. I have added a few more import statements such as flash.xml.* and flash.net.URLLoader but they have not solved my problem. Any input would be greatly appreciated. – Kevin Hays Jul 03 '13 at 19:57

1 Answers1

0

You can make it .as file in one of (at least) two ways

1) copy paste all exactly as it is to .as file and do:

include "[path]filename.as"

2) change the code to be a class
- make field_001, format, textFlow, languages, localeDefault, locale as public vars
- insert all code in a function named "init"
- add the "localeLoadedHandler" as a function
- click on your stage and change in the properties panel the stage's class to the new class

Good Luck!!

Yitzchak
  • 3,303
  • 3
  • 30
  • 50