royale-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com.INVALID>
Subject Re: Struggling with resource files
Date Mon, 02 Oct 2017 18:07:44 GMT
The Flash runtime doesn't know anything about resources.  In regular Flex,
and Resource Module is a SWF full of compiled Resource Bundles which are
classes that wrap the resource data.  IMO, that's too heavy for strings
and I believe there are many apps where the only things that change per
locale are strings, especially if images are not embedded and loaded via
URLs.

So, for Royale, for only Strings, I would propose that we teach the
compiler to take the same arguments, but maybe produce JSON or embedded
.properties files.  Not sure which one or both until we see how it works.

ClassReference already works in CSS files, so I suspect we can make it
work for Resources, but once you introduce ClassReference, JSON and or
embedded strings aren't sufficient, so I think we'd have to produce a .js
file instead.

A ResourceManager that is fully equivalent of the regular Flex
ResourceManager is not PAYG.  That's why I earlier suggested different
implementations that are PAYG.  The smallest would count on all resources
being inlined.  A fancier one would support loadable resources.

Today, the CSS information in each SWC is collected at compile time.  Type
Selectors are examined to make sure the class they represent is being
linked into the app, and all of that information is encoded.  CSS
implementations like SimpleCSSValuesImpl know how to find that encoded
information and turn it into data structures.  I think that is PAYG,
although we could experiment with it doing lazy loading or just-in-time
parsing of the encoded data.

I think we'd do roughly the same thing for Resources.  Encode the data as
embedded Strings and/or JSON.  Not sure we'd need to wrap a bead around
each bundle or locale.  IMO, it is just a database.  And then
SimpleCSSAndLocalesValuesImpl would know how to look for that data.

Of course, I could be wrong...
-Alex

On 10/2/17, 12:24 AM, "Harbs" <harbs.lists@gmail.com> wrote:

>Thanks for the links.
>
>Some thoughts/questions:
>
>The loading of the resource modules is something handled by the Flash
>runtime, or is that internal to Flex?
>
>Currently, do the compiler options do anything for the JS side of things?
>
>If I understand correctly, the “inlining” option adds the resources to
>the ResourceManager. I’m suggesting the ResourceManager is not
>necessarily needed if locales are configured at compile time. A more PAYG
>way would be to inline the resource directly into a variable of a bead
>which knows what to do with the resource. I don’t see any current
>annotation which could do that (either in MXML or AS).
>
>I don’t see how class references (and image references) could work in
>Royale (in JS). If we could get that working, it would be huge.
>
>Harbs
>
>> On Oct 2, 2017, at 9:57 AM, Alex Harui <aharui@adobe.com.INVALID> wrote:
>> 
>> See the Adobe docs: [1][2]
>> 
>> I think the functionality you are looking forward is supported by the
>> compiler.  The compiler already has a set of options that dictate what
>> bundles are "inline" in the app and I think they can be re-used to
>>output
>> different things.
>> 
>> [ResourceBundle] metadata tells the compiler which bundles to link.  The
>> compiler's -locale option dictates which language bundles for the
>> [ResourceBundles] it saw when linking the app need to be baked into the
>> app.  Separately, the ResourceManager in regular Flex has a way to load
>>a
>> SWF of other bundles.  The compiler has options to build a SWF with
>> certain bundles.
>> 
>> For JS, JSON might be a good format for a "ResourceModule".
>> 
>> I've seen the packages be accepted by Flash Builder on both Mac and
>> Windows.  There's a separate thread about when to merge packaging into
>> develop, and how to do the "big rename".
>> 
>> Later,
>> -Alex
>> 
>> [1] 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob
>>e.com%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data=
>>02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17
>>8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1
>>uciPIthGxL%2FF5H8%3D&reserved=0
>> -7f3a.html
>> [2] 
>> 
>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob
>>e.com%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data=
>>02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17
>>8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1
>>uciPIthGxL%2FF5H8%3D&reserved=0
>> -7f3c.html
>> 
>> On 10/1/17, 11:34 PM, "Harbs" <harbs.lists@gmail.com> wrote:
>> 
>>> I should probably spend some time to learn how resource bundles worked
>>>in
>>> Flex… ;-)
>>> 
>>> Metadata seems like a good solution, but it seems to me like there
>>>needs
>>> to be two sets of metadata tags. Some comments and questions I have:
>>> 
>>> 1. We’d need metadata tags which would just inline the resource into
>>>the
>>> compiled code for cases where a full-blown ResourceManager is overkill.
>>> 2. We’d need the [ResourceBundle] tag for compiling downloadable
>>>resource
>>> bundles. What would that look like in Javascript? A JS file which
>>> evaluates to the resources? A JSON file? Would default resources get
>>> auto-included in the main JS?
>>> 
>>> BTW, if there’s something I can do to help you with the packaging
>>>branch,
>>> please let me know.
>>> 
>>> Harbs
>>> 
>>>> On Oct 2, 2017, at 2:28 AM, Alex Harui <aharui@adobe.com.INVALID>
>>>>wrote:
>>>> 
>>>> 
>>>> 
>>>> On 10/1/17, 7:31 AM, "Harbs" <harbs.lists@gmail.com> wrote:
>>>> 
>>>>> I’d really like for the compiler to include resources as strings, but
>>>>> I’m
>>>>> not sure what the best way to declare it is.
>>>>> 
>>>>> How can we declare a reference to the resource and have the compiler
>>>>> include it?
>>>> 
>>>> Well, that depends...
>>>> 
>>>> The [ResourceBundle] metadata and the compiler's -locale option seemed
>>>> to
>>>> make people happy.  I don't remember any complaints about it, my only
>>>> issue was that it didn't seem to be efficient for String-only
>>>>resources.
>>>> [ResourceBundle] allows the strings to be managed in separate
>>>> .properties
>>>> files that are packaged with a SWC.  That's probably important because
>>>> you
>>>> probably don't want to have to list out every component's resources as
>>>> beads in your app.  It probably needs to be driven automatically by
>>>> metadata.
>>>> 
>>>> So, if we decide to stick with it, the challenge will be to teach the
>>>> compiler to do something different with the resource properties.
>>>> 
>>>> Thoughts?
>>>> -Alex
>>>> 
>>>>> 
>>>> 
>>> 
>> 
>

Mime
View raw message