[Zope3-dev] Re: MessageID's automatic translation in TAL

Dmitry Vasiliev lists at hlabs.spb.ru
Mon May 9 17:21:53 EDT 2005


Philipp von Weitershausen wrote:
> Stephan Richter wrote:
> 
>> On Friday 06 May 2005 10:11, Dmitry Vasiliev wrote:
>>
>>> Opinions?
>>
>>
>> Dimitry, I am sorry. There was already a papal's edict on the issue:
>>
>> http://mail.zope.org/pipermail/zope3-dev/2004-September/012186.html
>>
>> That means, message ids must be translated explicitely using 
>> i18n:translate. So, Dimitry, you can go ahead and deprecate the 
>> implict tranlation of message ids.
> 
> 
> Great. I guess that also means backing out most of r30249.

Yes, and I pretty sure that we'll found much more cases of implicit translation.

> Btw, I dug through the thread and found an 'interesting' edge case that 
> we might want to look into as well. Imagine you have
> 
>   <span tal:content="view/getMeSomeI18nMessage"
>         i18n:translate="explicit_message_id"
>         />
> 
> IMO, this shouldn't happen, meaning it should be a syntax error to use 
> tal:content and an explicit message id in i18n:translate in the same 
> tag. Maybe this was already fixed, but I would guess not.

The fix will be trivial anyway.

> A note about the edict:
> 
> The edict doesn't rule out a change of semantics, provided it was 
> written out in a proposal. For example, thinking about the above edge 
> case, it struck me that i18n:translate is really used for two things:
> 
> a) Translating a static string in the template
> 
>   <p i18n:translate="heading-greeting">Greetings, user!</p>
> 
> b) Translating a message id coming from Python code:
> 
>   <p tal:content="view/getAnI18nMessage" i18n:translate="">...</p>
> 
> So, i18n:translate has two different semantics, depending whether you're 
> using it for case a) or b). In case b), for example, stating an explicit 
> message id is nonsense, as I've stated in the edge case above.
> 
> So, here's an idea: Let's limit the use of i18n:translate to case a) and 
> introduce i18n versions of tal:content and tal:replace that mean "insert 
> the message id and translate it". It would look like that:
> 
>  <span i18n:content="view/getAnI18nMessage">...</span>
> 
> instead of
> 
>   <span tal:content="view/getAnI18nMessage" i18n:translate="">...</span>
> 
> The latter would be deprecated/forbidden. That would get rid of any 
> ambiguity regarding i18n:translate and thus also a lot easier for 
> message id extraction tools. They wouldn't collect false message ids 
> anymore.
> 
> Also, we could even require the input of i18n:content to always be an 
> i18n message id. So, if view.getAnI18nMessage() return a mere string, it 
> wouldn't be translated. But maybe there are use cases against this.

It wouldn't be translated anyway since i18n:content will be only translation
phase and we can't define a msgid for dynamic content, we just can pass the
string through or raise an error/warning.

> Thoughts?

I like the idea and I'm ready to implement the proposal, but I like to do it
after 3.1 will be released.

-- 
Dmitry Vasiliev (dima at hlabs.spb.ru)
     http://hlabs.spb.ru



More information about the Zope3-dev mailing list