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;
}