Salut à tous,
> Bonjour à vous,
>
> Ce message pour vous faire partager cette bibliothèque AS3 permettant
> d'internationaliser vos applications AS3 (et également Flex depuis
> peu). Elle se base sur la suite d'utilitaire gettext, bien connue.
>
> Plus qu'un simple parseur des fichiers de traduction (il en existe
> plusieurs), vous avez à dispo toute l'API de gettext, portée vers AS3.
> Elle s'inspire donc très largement de l'API qu'on trouve en C, d'où
> provient gettext à l'origine.
> Le principal intérêt de la biblio est de profiter de toute la
> puissance des utilitaires de gettext concernant la maintenance, la
> mise à jour et la création des traductions.
>
> Je vous invite à la tester, et à faire un feedback dessus ;)
> Toutes les infos sur http://wiki.github.com/vincent-petithory/as3-gettext
>    

Jolie initiative, pour ma part j'utilise gettext pour l'as3 depuis un 
petit moment, et je dois dire que ça a de sacré avantages (ayant souvent 
une partie serveur en django, on trouve tt ce qu'il faut pour 
administrer les locales direct depuis l'admin django).

À noter qu'Alessandro Crugnola avait déjà réaliser un parser pour 
gettext (voir ici : 
http://www.sephiroth.it/phpwiki/index.php?title=Gettext_actionscript3 )

En passant j'en profite pour rajouter en pièce jointe un petit jsfl qui 
m'a bien servi, il parcours la scène d'un fla récursivement pour à la 
fin générer un .pot avec tte les chaînes gettext trouvées. (à noter que 
les retours à la ligne sont échappés afin d'éviter les embrouilles).

Cédric

--

Vous recevez ce message, car vous êtes abonné au groupe Google Groupes FCNG.
Pour envoyer un message à ce groupe, adressez un e-mail à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
[email protected].
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/fcng?hl=fr



var getTextMatch = new RegExp( '_\\(\\s*"(.*)"\\s*\\)', "gim" );

var stringHash = {};
var a = browseScene ();
var l = a.length;

var s = "";

var p = fl.getDocumentDOM().pathURI;
var pa = p.split(new RegExp( "/|\\\\", "gi" ) );
var sp = p.replace(".fla", ".pot");

for(var i=0;i<l;i++)
{
        var o = a[i];
        var t = o.text;
        if( typeof t == "object" )
        {
                var m = t.length;
                for(var j=0;j<m;j++)
                {
                        s+= getPOString( t[j], o.frame, o.layer );
                }
        }
        else
        {
                s += getPOString( t, o.frame, o.layer );
        }
}

fl.trace( s );
FLfile.write( sp, s );

function getPOString ( text, frame, layer )
{
        var s = "";
        var safeText = text.replace( "\n", "\\n\"\n\"" );
        
        s += "\n# in '" + p + 
                 "' at frame '" + frame +
                 "' on layer '" + layer + "'\n";
        s += "msgid \"" + safeText + "\"\n";
        s += "msgstr \"" + safeText + "\"\n";
        return s;
}
function browseScene ()
{
        var timelines = fl.getDocumentDOM().timelines;
        var a = [];
        for( var i = 0; i< timelines.length; i++ )
        {
                a = a.concat( browseTimeline( timelines[ i ], "" ) ) 
        }
        return a;
}
function hasGettextContent( frame )
{
        return getSafeActionScript ( frame ).search( getTextMatch ) != -1;
}
function browseFrame( frame )
{
        var getTextMatch = new RegExp( '_\\(\\s*"(.*)"\\s*\\)', "gim" );
        var a = [];
        var result;
        while( result = getTextMatch.exec( getSafeActionScript ( frame ) ))
        {
                if( !stringHash.hasOwnProperty( result[ 1 ] )) 
                {
                        stringHash[ result[ 1 ] ] = true;
                        a.push( result[ 1 ] );
                }
        }
        return a;
}
function getSafeActionScript( frame )
{
        var lineConcatMatch = new RegExp( '\\"\\s*\\+\\s*\\"', "gi" );
        return frame.actionScript.replace( lineConcatMatch, "" );
}
function browseTimeline ( timeline, path )
{
        if( !timeline )
                return [];
        
        var a = [];
        for ( var i = 0; i < timeline.layers.length; i++ )
        {
                var layer = timeline.layers[ i ];
                for( var j = 0; j < layer.frames.length; j++ )
                {
                        var frame = layer.frames[ j ];
                        if( hasGettextContent( frame ) )
                        {
                                var b = browseFrame(frame);
                                if( b.length > 0 ) 
                                        a.push( {
                                                 frame:frame.name ? frame.name 
: j,
                                                 layer:layer.name ? layer.name 
: i,
                                                 path:path,
                                                 text:b
                                           }); 
                        }
                        for( var k = 0; k < frame.elements.length; k++ )
                        {
                                var element = frame.elements[ k ];
                                if( element.elementType == "instance" )
                                {
                                        a = a.concat( browseTimeline( 
element.timeline, element.name ? path + "." + element.name : "" ) ); 
                                }
                        }
                }
        }
        return a;
}

Répondre à