[Zope-dev] zope.18n:translate() keyword arguments versus MessageID attributes
Michael Howitz
mh at gocept.com
Wed Oct 27 02:44:11 EDT 2010
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 · mh at gocept.com · 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
More information about the Zope-Dev
mailing list