Yes, that's the approach taken for Laszlo Webtop. You have a build.properties 
file for the ANT build, where the locale is set:
locale=en-us

Then the ANT compile target looks for a CSS file with that locale:
        <target name="compile-app" description="Compile application">
        
                <echo message="tempdir: ${buildlocaletemp.dir}" />

                <echo message="Application dir: ${app-basename}" />
                <copy file="${basedir}/main.lzx"
                          tofile="${basedir}/_main.lzx" overwrite="yes" />
              
              
        <if>
            <available file="locale_${localename}.css"/>
            <then>
                    <replaceregexp file="${basedir}/_main.lzx" 
match="&lt;/canvas&gt;" replace='&lt;stylesheet 
src="locale_${localename}.css"/&gt;&lt;/canvas&gt;' flags="g" />
            </then>
        </if>

Then the closing </canvas> tag is replaced through a regexp, adding a 
<stylesheet src="locale_${localename}.css... But remember, this is Webtop using 
4.0.18!!!! No idea how that is handled with a DHTML version of Webtop running 
4.3+

You would still have a mechanism for selecting the correct SWF file for each 
language. If you have Tomcat, use a servlet filter to detect the locale, have a 
look here for some example code:
http://svn.openlaszlo.org/labs/lzproject/trunk/src/org/openlaszlo/lzproject/i18n/I18NFilter.java

I haven't tested if it works to compile a LZO referencing a CSS for different 
languages. Someone would have to try that, do you think that will work, Tucker?

Best,
Raju

On Feb 16, 2010, at 8:12 PM, P T Withington wrote:

> I believe Raju is speculating here.  Currently, you cannot change your 
> stylesheet dynamically at run time.  This is a limitation of the CSS 
> approach.  I believe Raju was saying that where the CSS approach is used, the 
> app is compiled (as a SOLO app) for each possible language and the correct 
> version is somehow selected by the app server.
> 
> On 2010-02-16, at 06:02, cem sonmez wrote:
> 
>> Raju has mentioned it before about how to do this.
>> as far as i understand, i think he says that generate swf's for each
>> stylesheet and then use the related swf depend on the language selection, is
>> it right ?
>> If it is, isnT this so laborious, bec. in this case i need to change the
>> stylesheet src in each lzx on my application.
>> Thanks
>> Cem
>> 
>> 2010/2/16 cem sonmez <[email protected]>
>> 
>>> Today, I have looked at the css page of developer doc [1] and decided to
>>> use the css style:) Bec. it looks more lucid than using dataset.
>>> 
>>> my css' are :
>>> *turkish.css*
>>> ---------------------
>>> [text_id="1"] {
>>>   string: "giriş";
>>> }
>>> [text_id="2"] {
>>>   string: "kaydol";
>>> }
>>> [text_id="3"] {
>>>   string: "gönder";
>>> }
>>> *english.css*
>>> ---------------------
>>> [text_id="1"] {
>>>   string: "login";
>>> }
>>> [text_id="2"] {
>>>   string: "register";
>>> }
>>> [text_id="3"] {
>>>   string: "submit";
>>> }
>>> 
>>> and i use one of it in my class like
>>> 
>>> <canvas debug="true">
>>>   <stylesheet src="turkish.css"/>
>>>   <simplelayout />
>>>   <button>change css
>>>       <handler name="onclick">
>>>          * <!--how to change the stylesheet here during runtime-->*
>>>       </handler>
>>>   </button>
>>>   <button text="$style{'string'}">
>>>       <attribute name="text_id" value="3"/>
>>>   </button>
>>> </canvas>
>>> 
>>> as i commented in the canvas code, is it possible to change the stylesheet
>>> src during runtime?
>>> Thanks in advance
>>> 
>>> [1] - http://www.openlaszlo.org/lps4.7/docs/developers/css.html
>>> 
>>> 
>>> Cem
>>> 
>>> 2010/2/16 P T Withington <[email protected]>
>>> 
>>>> I never get datasets myself.  Just to verify that the CSS way works, I did
>>>> test the following:
>>>> 
>>>> <canvas layout="axis: y; spacing: 5">
>>>> <stylesheet>
>>>>   i18nbutton[name='submit'] { text: "gönder"; }
>>>>   i18nbutton[name="reset"] { text: "reset"; }
>>>> </stylesheet>
>>>> 
>>>> <class name="i18nbutton" extends="button">
>>>>    <attribute name="text" style="text" />
>>>> </class>
>>>> 
>>>>  <i18nbutton name="submit" />
>>>> <i18nbutton name="reset" />
>>>> 
>>>> </canvas>
>>>> 
>>>> and it works for me.
>>>> 
>>>> On 2010-02-15, at 19:01, cem sonmez wrote:
>>>> 
>>>>> i am sorry, maybe this thread has become so long bec. of me but donT
>>>>> understand why this happens
>>>>> 
>>>>> <canvas>
>>>>>  <dataset name="localized">
>>>>>      <string name="submit" value="gönder"/>
>>>>>      <string name="reset" value="reset"/>
>>>>>  </dataset>
>>>>> 
>>>>>  <button text="$path{'localized:/stri...@name=\'submit\']/@value'}" />
>>>>> 
>>>>> </canvas>
>>>>> 
>>>>> I am just trying this code and see nothing.
>>>>> 
>>>>> Cem
>>>>> 
>>>>> 2010/2/16 P T Withington <[email protected]>
>>>>> 
>>>>>> The value of the expression in the $path{} statement needs to be a
>>>> string,
>>>>>> so I think you would need to say:
>>>>>> 
>>>>>> <button text="$path{'localized:/stri...@name=\'submit\']/@value'}"
>>>>>> 
>>>>>> but I have not tested this.
>>>>>> 
>>>>>> On 2010-02-15, at 18:38, cem sonmez wrote:
>>>>>> 
>>>>>>> jamesr, I have used your same notation, but i m getting error
>>>>>>> *Syntax error: the token ":" was not expected at this position.*
>>>>>>> I have made lots of changes at the $path expression. Still nothing
>>>>>> happens
>>>>>>> Another error that  i m getting
>>>>>>> *Lexical error. The source location is for the element that contains
>>>> the
>>>>>>> erroneous script. The error may come from an unterminated comment.*
>>>>>>> Do you have an idea why this happens? Did you used this code snippet
>>>>>> before
>>>>>>> you post it?
>>>>>>> And also does anyone have an idea about this issue?
>>>>>>> 
>>>>>>> Regards
>>>>>>> Cem
>>>>>>> 
>>>>>>> 2010/2/15 cem sonmez <[email protected]>
>>>>>>>> 
>>>>>>>> Yes i have seen $path before, but i have never used it for any
>>>>>> constraint.
>>>>>>> $path usage has been explained well at [1].
>>>>>>>> I will take a look at it again and try this form.
>>>>>>>> Thanks a lot
>>>>>>>> Cem
>>>>>>>> 
>>>>>>>> [1] -
>>>>>>> 
>>>>>> 
>>>> http://www.openlaszlo.org/lps4.7/docs/developers/databinding.html#d0e96468
>>>>>>>> 
>>>>>>>>> 2010/2/15 jamesr <[email protected]>
>>>>>>>>>> 
>>>>>>>>>> Sure! as PT mentioned, there may be overhead for using the $path
>>>>>> method
>>>>>>> i'll direct you toward, for very large applications. There are a few
>>>>>>> manager/registry based ways around this overhead, no problem, but the
>>>>>>> conversation is out of scope to your direct question to get into -- in
>>>>>> this
>>>>>>> email.
>>>>>>>>>> 
>>>>>>>>>> Have you ever used the $path{} form of constraints? they take a
>>>>>>> dataset:datapath pair and bind to a specific location in a dataset,
>>>> which
>>>>>>> will update when the dataset changes. From your code snippets i'm
>>>>>> guessing
>>>>>>> you haven't seen them.
>>>>>>>>>> 
>>>>>>>>>> if you have a dataset thus,
>>>>>>>>>> 
>>>>>>>>>> <dataset name="localized">
>>>>>>>>>> <string name="submit" value="(submit in another language)"/>
>>>>>>>>>> <string name="resest" value="(reset in another language)"/>
>>>>>>>>>> </dataset>
>>>>>>>>>> 
>>>>>>>>>> then you can set up a path constraint by saying,
>>>>>>>>>> 
>>>>>>>>>> <button text="$path{localized:/stri...@name='submit']/@value}"
>>>>>>>>>> 
>>>>>>>>>> and this will *find* the string node with name "submit" (be sure to
>>>>>> have
>>>>>>> unique names or you'll get mulitple nodes back and the expression will
>>>> be
>>>>>>> invalid) and use its value attribute as the text for the button.
>>>>>>>>>> 
>>>>>>>>>> more info is in the laszlo docs... i don't have a link to it handy,
>>>>>>> sorry
>>>>>>>>>> 
>>>>>>>>>> -j
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> cem sonmez wrote:
>>>>>>>>>>> 
>>>>>>>>>>> Thanks all for your replies.
>>>>>>>>>>> But i just can say that i am inexperienced about css. So all along
>>>> i
>>>>>>> have thought to use dataset. The problem is to change the texts
>>>>>> dynamically
>>>>>>> when i set the datapath's src attribute during runtime.
>>>>>>>>>>> But as you said ptw, itS more about skinning, css is more
>>>> convenient
>>>>>> to
>>>>>>> use. I will look at it as well.
>>>>>>>>>>> For the dataset usage. It may looks like :
>>>>>>>>>>> 
>>>>>>>>>>> <dataset name="dset" src="words.xml" />
>>>>>>>>>>> <datapointer id="dpointer" xpath="dset:/language">
>>>>>>>>>>>    <method name="getMessage" args="textId">
>>>>>>>>>>>        this.setAttribute('xpath', 'dset:/language');
>>>>>>>>>>>        this.selectChild();
>>>>>>>>>>>        do {
>>>>>>>>>>>            if (this.xpathQuery('@id') == textId) {
>>>>>>>>>>>                var message = this.xpathQuery('value/text()');
>>>>>>>>>>>                if ($debug)
>>>>>>>>>>>                    Debug.write("datapointer : " + message);
>>>>>>>>>>>                return message;
>>>>>>>>>>>            }
>>>>>>>>>>>        } while (this.selectNext());
>>>>>>>>>>>    </method>
>>>>>>>>>>> </datapointer>
>>>>>>>>>>> 
>>>>>>>>>>> and i also can use it
>>>>>>>>>>> <button name="button1" text="${dpointer.getMessage(1)}" />
>>>>>>>>>>> 
>>>>>>>>>>> I havenT just tried, but the problem is going to occur when i want
>>>> to
>>>>>>> change the dataset src at runtime. jamesr, the way that u mentioned
>>>> likes
>>>>>>> mine. Can you instruct a bit more please.
>>>>>>>>>>> 
>>>>>>>>>>> thanks all again .
>>>>>>>>>>> Kind regards
>>>>>>>>>>> Cem
>>>>>>>>>>> 
>>>>>>>>>>> 2010/2/15 P T Withington <[email protected] <mailto:[email protected]>>
>>>>>>>>>>> 
>>>>>>>>>>> Using a dataset is an equally valid approach, but I think it was
>>>>>>>>>>> tried and found to require too much overhead.  Of course, if CSS
>>>>>>>>>>> is made dynamic, perhaps it will have equivalent overhead.
>>>>>>>>>>> 
>>>>>>>>>>> Perhaps the reason some people think of CSS first is because it
>>>>>>>>>>> seems i18n is like "skinning" or styling your app.
>>>>>>>>>>> 
>>>>>>>>>>> On 2010-02-15, at 12:09, jamesr wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Would it not be more expedient to write a class, called perhaps
>>>>>>>>>>> localtext, that takes a single field to index inside of a dataset
>>>>>>>>>>> wherein a given real-world language sentence is kept, so that by
>>>>>>>>>>> changing datasets you change all displayed localized text?
>>>>>>>>>>>> 
>>>>>>>>>>>> Why use CSS?
>>>>>>>>>>>> 
>>>>>>>>>>>> P T Withington wrote:
>>>>>>>>>>>>> There are two improvements targeted for 5.0 that will help this
>>>>>>>>>>> situation:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> LPP-8556 Add default CSS style properties to <view>
>>>>>>>>>>>>> LPP-7359 Make CSS attribute selectors dynamic
>>>>>>>>>>>>> 
>>>>>>>>>>>>> There should also be one to make it so you can load a
>>>>>>>>>>> stylesheet at runtime, but I can't seem to find that.  Maybe Max
>>>>>>>>>>> and I only talked about it...
>>>>>>>>>>>>> 
>>>>>>>>>>>>> With all three of those, it should be possible to have a single
>>>>>>>>>>> app that will be localized when it is loaded.  For now, you are
>>>>>>>>>>> correct, you need to compile your app for each language.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> ---
>>>>>>>>>>>>> 
>>>>>>>>>>>>> With LPP-7184 Binary libraries don't work in swf9 resolved (and
>>>>>>>>>>> integrated to 4.7), we believe that LZO's are now fully supported
>>>>>>>>>>> in swf9 for 4.7.1 (soon to be released) and 5.0.x (in
>>>>>>>>>>> development).  We'd welcome testing by anyone who needs this
>>>>>>>>>>> feature.  Grab the latest 4.7.1 here:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> http://download.openlaszlo.org/nightly/4.7/
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On 2010-02-15, at 11:39, Raju Bitter wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> All the internationalization based on CSS for Webtop (at least
>>>>>>>>>>> with
>>>>>>>>>>>>>> the version I've used) requires you to recompile the app for a
>>>>>>>>>>>>>> different language. That's not too much of a problem, just
>>>>>>>>>>> generate
>>>>>>>>>>>>>> different versions of the app for different languages.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It would be good to have dynamic CSS support at runtime, but a
>>>>>>>>>>>>>> workaround could be to put all the strings into an LZO, with
>>>>>>>>>>> different
>>>>>>>>>>>>>> LZOs for different languages. That should work, shouldn't it?
>>>> Of
>>>>>>>>>>>>>> course you are limited to SWF8 and DHTML then, since there's
>>>>>>>>>>> still no
>>>>>>>>>>>>>> support for LZOs with AS3 based runtimes, as far as I know.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 2010/2/15 P T Withington <[email protected] <mailto:[email protected]
>>>>>> :
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I believe some use CSS styles to achieve
>>>>>>>>>>> internationalization, although currently LZX does not support
>>>>>>>>>>> dynamically changing styles, so I'm not sure exactly how this is
>>>>>>>>>>> handled.  Currently, styles need to be pre-processed by the
>>>>>>>>>>> compiler.  Ideally, you would have your application server
>>>> looking
>>>>>>>>>>> at the browser request language preference and serve up different
>>>>>>>>>>> style sheets based on that.  It may be that people are using a
>>>>>>>>>>> .jsp to do this kind of dispatching.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In theory, you would write something like:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <!-- supply style sheet based on browser language -->
>>>>>>>>>>>>>>> <stylesheet>
>>>>>>>>>>>>>>> i18ntext [label="hi"] { text: "hello" }
>>>>>>>>>>>>>>> </stylesheet>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <class name="i18ntext" extends="text">
>>>>>>>>>>>>>>> <attribute name="label" type="string" />
>>>>>>>>>>>>>>> <attribute name="text" style="text" />
>>>>>>>>>>>>>>> </class>
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> <i18ntext label="hi" />
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> [...]
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> Cem SONMEZ
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Cem SONMEZ
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Cem SONMEZ
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> Cem SONMEZ
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Cem SONMEZ
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Cem SONMEZ
>>> 
>> 
>> 
>> 
>> -- 
>> Cem SONMEZ
> 
> 


Reply via email to