[Zope-Coders] i18n:attributes in 2.7

Godefroid Chapelle gotcha@swing.be
Fri, 25 Jul 2003 11:02:16 +0200


Hi all,

I am currently working on Silva i18n. This led me to take a look at the 
code for i18n:attributes.

I'll try to explain the current situation :

I) in Zope 2.6.1,

I.1) space separated attributes as in

<span value="value" title="title" accesskey="acc"
i18n:attributes="value title accesskey" />

are accepted and the three attributes are translated.
This should not work according to the ZPT i18n doc/spec at
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport

I.2) semicolon separated attributes (Zope 3 current syntax) as in

<span value="value" title="title" accesskey="acc" 
i18n:attributes="value; title; accesskey" />

are accepted.
accesskey attribute is translated,
value and title are kept as they are (not translated)
and value; and title; attributes are added (HUM ;-)

IOW it doesn't work as it should according to the ZPT i18n doc/spec.

I.3) attributes with associated message ids as in

<span value="value" title="title" accesskey="acc" i18n:attributes="value 
msgvalue; title msgtitle; accesskey msgaccesskey" />

do not work.


II) in Zope 2.7.b1, and Zope3

II.1) space separated attributes as in

<span value="value" title="title" accesskey="acc" i18n:attributes="value 
title accesskey" />

generate a compile time error
IOW break the backwards compatibility.

II.2) semicolon separated attributes (Zope 3 current syntax) as in

<span value="value" title="title" accesskey="acc" 
i18n:attributes="value; title; accesskey" />

are accepted and translated correctly.

II.3) attributes with associated message ids as in

<span value="value" title="title" accesskey="acc" i18n:attributes="value 
msgvalue; title msgtitle; accesskey msgaccesskey" />

are accepted and translated correctly according to message ids.

To summarize, as message ids translation for attributes was added, 2.7 
and 3 are working according to the doc/spec,
but 2.7 breaks backward compatibility to 2.6.1.

This leads to the following question : do we (1) accept this rupture in 
i18n:attributes management or do we (2) want 2.7 to cover space 
separated attributes ?

IOW, could people that need backward compatibility stand up ?

BTW, second choice would lead us to a bad situation where we cannot 
discriminate between

<span value="value" title="title"
i18n:attributes="value title" />

and

<span value="value" title="title"
i18n:attributes="title msgtitle" />

We could add a warning mechanism somewhere in the case of use of space 
separated attributes.

Further,

I checked in both 2.7 and 3 a safety net that avoids a developer to 
declare attributes being both dynamically generated (by being included 
in a tal:attributes) and statically translated (by being included with a 
message id in a i18n:attributes).

This lead to the following comments :

1) Fred L. Drake, Jr. wrote:

> While this sounds very reasonable on the face of it, I don't think
> it's the right thing.  (Whether what was implemented to begin with is
> the right thing is a separate question. ;)
> 
> When a message id is given by i18n:attributes, the result of the
> tal:attributes expression should be used as the default text passed to
> the translation service. (If there is no tal:attributes setting for
> the attribute, the undecorated attribute should be used as a source
> for the default text, if present.)
> 
>   -Fred
> 
IMHO, as we would not use the message id value, I think it is reasonable 
to warn the developer and force him to make a choice.

2) Barry Warsaw wrote:

> What if I wanted the button text to be "Submit ${name}"?  Ignoring
> translations, I'd just write
> 
> <input type="submit" value="ignore"
>         tal:attributes="value string:Submit ${name}">
> 
> Now, what if I want to translate the button text?
> 
> <input type="submit" value="ignore"
>         tal:attributes="value string:Submit ${name}"
>         i18n:attributes="value submit_name_button">
> 
> So if the translation for submit_name_button returns "${name} Fobnitz"
> and a mapping of $name to the path "name", I'd get the right thing in
> the target language.  But if there was no translation, then I'd want
> "Submit ${name}" with the interpolation happening dynamically.
> 
> -Barry

Jim Fulton answered :

> That's an interesting case, however, it won't work with i18n:attributes,
> Because there is no mapping passed to the translation facility when
> translating attribute values.
> 
> Jim

and Barry followed with :

> Just to follow up because talked about this in person: it would be good
> if someday it was possible to have substitutions in translatable
> attributes, and it would be good if the syntax for that was as close as
> possible as it is for translatable tags.  
> 
> If that means this restriction still stays in ZPT for Zope 2.7, then
> okay.
> 
> -Barry

IOW there seems to be an agreement that there is a need for 
interpolation in attributes translation.
That won't be part of Zope 2.7.

In any case, I think it is a good opportunity to think about the way we 
want this mechanism to be implemented.

I'd propose it should be done in Zope3 first and later back-ported to 
Zope 2.x

-- 
Godefroid Chapelle

BubbleNet sprl
rue Victor Horta, 18 / 202
1348 Louvain-la-Neuve
Belgium

Tel + 32 (10) 459901

TVA 467 093 008
RC Niv 49849