Re: zope.18n:translate() keyword arguments versus MessageID attributes

Michael Howitz <[email protected]>
Newsgroups gmane.comp.web.zope.devel
Message-ID <[email protected]>
Am 26.10.2010 um 16:13 schrieb Tres Seaver:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 10/26/2010 09:36 AM, Christian Theune wrote:
>> Hi,
>> 
>> I've fiddled a bit with 
>> https://bugs.edge.launchpad.net/zope.i18n/+bug/592753 and ended up with 
>> an unclear situation:
>> 
>> The ``translate'' methods of both zope.i18n and ITranslationDomain have 
>> optional parameters for the domain/default/mapping attributes of a 
>> message ID.
>> 
>> The message ID attributes always override the parameters but it is not 
>> said why. (I probed the tests and they at least verify that this is the 
>> case but don't state motivation.)
>> 
>> As I had to chase this down for quite a while when I originally tried to 
>> call zope.i18n.translate() directly (for providing translated emails) it 
>> took me quite a while to understand what's going on.
>> 
>> I see two possibilities for improving the situation:
>> 
>> - don't implicitly ignore the parameters, but raise an exception if
>>   both a message id and at least one of the parameters (domain/default
>>   /mapping) is given and write some documentation that explains the
>>   situation (what is happening and why)
>> 
>> or
>> 
>> - make the parameters take precedence over the message id attributes
>> 
>> So - why not do the latter?
> 
> I prefer the latter, and don't think we need a deprecation cycle for it:
> if the call site is passing in a mapping, that is presumably more
> specific than anything stored in the catalog.  I can't see how we would
> break anything here, as nobody is likely to have actually used the
> feature (since it is effectively a no-op).

+1 But the `mapping` attribute should update the existing mapping of the message ID as this would allow to have a partial mapping stored on the message ID and add the other part when translating.

Creating new message IDs from existing message IDs should behave the same way:

police_and_dog = _('${a} + ${b} = ${c}', mapping=dict(a='police', c='police dog'))
police_dog = _(police_and_dog, mapping=dict(b='dog'))

Currently the mapping for `police_dog` is ignored but I think it should update the mapping of `police_and_dog` in the new message ID.

Currently you have to do the following to achieve the same:

mapping = police_and_dog.mapping.copy()
mapping.update(dict(b='dog'))
police_dog = _(unicode(police_and_dog), mapping=mapping)

Yours sincerely,
-- 
Michael Howitz · [email protected] · software developer
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 8 · fax +49 345 1229889 1
Zope and Plone consulting and development

_______________________________________________
Zope-Dev maillist  -  [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.