[Seaside] Re: multilanguage (blog post)

Levente Uzonyi leves at elte.hu
Wed Nov 17 02:18:51 UTC 2010


On Tue, 16 Nov 2010, Sebastian Sastre wrote:

> Okay, here: Multiligual web applications design ala Smalltalk

We implemented this a bit differently (in Seaside 2.8). In Squeak String 
>> #translated is already used, so we're using #localized as the selector:

String >> localized

 	| session |
 	(session := WACurrentSession value) ifNil: [ ^self ].
 	^session translator
 		translate: self
 		inContext: session parent name

The context is important, because the same phrase may have different 
translations in different contexts. There's a default context which is 
used as a fallback during lookup. If a phrase doesn't have a translation 
in the requested context, the default context is used. There's also String 
>> #localizedInContext: which lets you pass a custom context if necessary.

There's a global Translator singleton that maps languages to translators 
(for that language). A translator for a language has a single dictionary 
which maps context-phrase pairs to their translations. All phrases are in 
english by default, so there's no lookup if the language is english.

The translator objects are cached by the session.

The db is looked up every time a translation is missing for a 
context-phrase pair. If there's a match in the database, then it's stored, 
otherwise not.

Concurrent access is implemented by copy-on-write. This may sound 
inefficient, but it works well with a few thousand phrases and less than 
100 contexts.

We also have a decoration which collects translations on the current page. 
This allows the user (editor) to translate them during viewing. It's 
implemented with notifications.


Levente

Btw, there's a bug in your blog app. It refreshes every second if there's 
no session data in the url when a post is viewed.

>
> sebastian
>
> o/
>
>
> On Nov 15, 2010, at 2:17 PM, Pablo Gancharov wrote:
>
>> Yes me too!
>>
>> 2010/11/15 <seaside-request at lists.squeakfoundation.org>
>> Send seaside mailing list submissions to
>>        seaside at lists.squeakfoundation.org
>>
>> To subscribe or unsubscribe via the World Wide Web, visit
>>        http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>> or, via email, send a message with subject or body 'help' to
>>        seaside-request at lists.squeakfoundation.org
>>
>> You can reach the person managing the list at
>>        seaside-owner at lists.squeakfoundation.org
>>
>> When replying, please edit your Subject line so it is more specific
>> than "Re: Contents of seaside digest..."
>>
>>
>> Today's Topics:
>>
>>   1. Re: multilanguage (AA)
>>   2. Re: making a read-only checkbox (Gilles Schtickzelle)
>>   3. Re: making a read-only checkbox (Diogenes Moreira)
>>
>>
>> ----------------------------------------------------------------------
>>
>> Message: 1
>> Date: Mon, 15 Nov 2010 12:04:21 +0000
>> From: AA <aa at serendip.demon.co.uk>
>> Subject: Re: [Seaside] multilanguage
>> To: seaside at lists.squeakfoundation.org
>> Message-ID: <20101115120421.d4580e44.aa at serendip.demon.co.uk>
>> Content-Type: text/plain; charset=US-ASCII
>>
>> Yes, please! I'd love to hear details about how you did this...
>>
>> Amir
>>
>>
>> On Sat, 13 Nov 2010 14:34:25 -0200
>> Sebastian Sastre <sebastian at flowingconcept.com> wrote:
>>
>>> Hi Carlos,
>>>
>>> our apps are trilingual and we basically implemented #translated in String to delegate what to do to the session. Then the session decides the destination language and delegates the translation to the polyglot helper we've made.
>>>
>>> Once you have that, all you need is a little webapp that allows you to edit the phrases of each translation.
>>>
>>> I can promise you that this is not big deal, maybe I should blog details about it
>>>
>>> sebastian
>>
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Mon, 15 Nov 2010 12:17:07 +0100
>> From: Gilles Schtickzelle <gschtick at gmail.com>
>> Subject: Re: [Seaside] making a read-only checkbox
>> To: Seaside - general discussion <seaside at lists.squeakfoundation.org>
>> Message-ID:
>>        <AANLkTi=T_Vy-y_h10EsATNUkXEK72VvDevLRZvzsFnqm at mail.gmail.com>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> Ah yes thank you!
>>
>> I had tried to add a 'disabled: true' but apparently I put it at the wrong
>> place and it wasn't working.
>> Now it's all good thanks.
>>
>> On Mon, Nov 15, 2010 at 11:51 AM, Nick Ager <nick.ager at gmail.com> wrote:
>>
>>> Hi Giles,
>>>
>>> I have a form with a bunch of checkboxes. I want some of them to be
>>>> disabled depending on wether some other are checked or not.
>>>> I just can't figure out how to make a read-only checkbox (so that it would
>>>> still show but would be greyed out).
>>>
>>>
>>> Try:
>>>
>>> html checkbox
>>>  value: true;
>>> disabled: true;
>>> with: 'a disabled checkbox'
>>>
>>>
>>> #disabled: works for all form elements.
>>>
>>>
>>>
>>>
>>>> Is there such a thing in seaside (optimally with jquery so they can be
>>>> updated on the fly when the user check/uncheck a box).
>>>>
>>>
>>> html checkbox
>>>  id: #myDisabledCheckbox;
>>> value: true;
>>> disabled: true;
>>>  with: 'a disabled checkbox'.
>>>  html checkbox
>>>  value: true;
>>> onClick: ((html jQuery: #myDisabledCheckbox) attributeAt: 'checked' put:
>>> (html jQuery this attributeAt: 'checked'));
>>>  with: 'mirror the other checkbox'
>>>
>>>
>>> To put this example together I Googled 'jQuery checkbox' - found
>>> http://www.electrictoolbox.com/check-uncheck-checkbox-jquery/ then
>>> translated the result into Seaside jQuery.
>>>
>>> Hope this helps
>>>
>>> Nick
>>>
>>>
>>> _______________________________________________
>>> seaside mailing list
>>> seaside at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>
>>>
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20101115/68ef2694/attachment.html
>>
>> ------------------------------
>>
>> Message: 3
>> Date: Mon, 15 Nov 2010 08:53:12 -0300
>> From: Diogenes Moreira <diogenes.moreira at gmail.com>
>> Subject: Re: [Seaside] making a read-only checkbox
>> To: Seaside - general discussion <seaside at lists.squeakfoundation.org>
>> Message-ID:
>>        <AANLkTi=3aFRs-3vDi_m2v119SV527ZU5R++=L49EFGzn at mail.gmail.com>
>> Content-Type: text/plain; charset=ISO-8859-1
>>
>> Here the net, not only the fish...
>> The next when you need knows a property in a seaside object, take a
>> look to WAHtmlCanvas and WARenderCanvas, in that objects methods
>> seaside builds the htmls components. In your case, in your case the
>> object whon represent to checkbox is WACheckboxTag.
>> Otherwise, if the standars object don't have the properties/messages
>> (that is very extrange, but may be happend) that you need, you can use
>> message attributesAt:put: to set an other properties
>>
>> Best Regards
>>
>> 2010/11/15, Gilles Schtickzelle <gschtick at gmail.com>:
>>> Ah yes thank you!
>>>
>>> I had tried to add a 'disabled: true' but apparently I put it at the wrong
>>> place and it wasn't working.
>>> Now it's all good thanks.
>>>
>>> On Mon, Nov 15, 2010 at 11:51 AM, Nick Ager <nick.ager at gmail.com> wrote:
>>>
>>>> Hi Giles,
>>>>
>>>> I have a form with a bunch of checkboxes. I want some of them to be
>>>>> disabled depending on wether some other are checked or not.
>>>>> I just can't figure out how to make a read-only checkbox (so that it
>>>>> would
>>>>> still show but would be greyed out).
>>>>
>>>>
>>>> Try:
>>>>
>>>> html checkbox
>>>>  value: true;
>>>> disabled: true;
>>>> with: 'a disabled checkbox'
>>>>
>>>>
>>>> #disabled: works for all form elements.
>>>>
>>>>
>>>>
>>>>
>>>>> Is there such a thing in seaside (optimally with jquery so they can be
>>>>> updated on the fly when the user check/uncheck a box).
>>>>>
>>>>
>>>> html checkbox
>>>>  id: #myDisabledCheckbox;
>>>> value: true;
>>>> disabled: true;
>>>>  with: 'a disabled checkbox'.
>>>>  html checkbox
>>>>  value: true;
>>>> onClick: ((html jQuery: #myDisabledCheckbox) attributeAt: 'checked' put:
>>>> (html jQuery this attributeAt: 'checked'));
>>>>  with: 'mirror the other checkbox'
>>>>
>>>>
>>>> To put this example together I Googled 'jQuery checkbox' - found
>>>> http://www.electrictoolbox.com/check-uncheck-checkbox-jquery/ then
>>>> translated the result into Seaside jQuery.
>>>>
>>>> Hope this helps
>>>>
>>>> Nick
>>>>
>>>>
>>>> _______________________________________________
>>>> seaside mailing list
>>>> seaside at lists.squeakfoundation.org
>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>>
>>>>
>>>
>>
>> --
>> Enviado desde mi dispositivo móvil
>>
>>
>> ------------------------------
>>
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>
>>
>> End of seaside Digest, Vol 95, Issue 30
>> ***************************************
>>
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>


More information about the seaside mailing list