[Zope-dev] Re: [Checkins] SVN: zope.i18n/branches/regebro-pluralsupport/src/zope/i18n/ Changed the API. It's unwieldy as it is, so better have separate methods

Hanno Schlichting plone at hannosch.info
Wed Jul 16 16:36:30 EDT 2008


Hi.

It's awesome to see some progress on this. You are aware of the Gettext 
manual at 
http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms right?

Stephan Richter wrote:
> On Wednesday 16 July 2008, Lennart Regebro wrote:
>> While talking about this, what would a ZPT implementation of this best
>> look like? An i18n:count statement that takes expressions?
>>
>>    <p i18n:translate="" i18n:count="view/file_count">There are %d files</p>
>>
>> Or?
> 
> Good question! The ZPT above is not correct; once we write a correct one, it 
> becomes more obvious:
> 
> <p i18n:translate="">There are <span tal:content="view/num" i18n:name="num" 
> i18n:count="view/num">10</span> files.</p>
> 
> Alternatively we could just evaluate the tal:content or tal:replace 
> expression.

So here's a set of additional use-cases:

<p i18n:translate="">
You selected the book called
<span tal:content="title" i18n:name="title">Python for dummies</span>.
</p>

In this case, the i18n:name shouldn't be treated as a number, so I think 
we need an explicit statement like i18n:count to signal this. We could 
have the i18n:count default to taking the expression if it is empty.


<p i18n:translate="">
You have to pay
<span tal:content="view/formatted_amount" i18n:name="amount" 
i18n:count="view/amount">6 dollars</span>.
</p>

In this case the underlying value is a simple integer, but the actual 
presentation might be locale dependent, like currency formatting.


<p i18n:translate="">
You selected
<span tal:content="num" i18n:name="num">5</span>
out of
<span tal:content="total" i18n:name="total">10</span>
files.
</p>

I'm not sure what to do with this actually. How does multiple numbers in 
the same sentence are handled? I think this is just not allowed and 
should cause a syntax error, as there's no general way to translate 
those sentences with Gettext. Or does it result in a n-dimensional matrix?

<br i18n:attributes="">
You selected
<span tal:content="num" i18n:name="num">5</span>
out of
<span tal:content="total" i18n:name="total">10</span>
files.
</p>


Can someone think about an example involving i18n:attributes? In TAL I 
cannot construct a dynamic one it seems.


How does this behave in regard to zope.i18nmessageid?

from zope.i18nmessageid import MessageFactory
_ = MessageFactory('domain')


mapping=dict(num=10)
foo = _(u'There are ${num} files.', mapping=mapping)


mapping=dict(num=10, name='/foo/bar')
foo = _(u'There are ${num} files in the folder named ${name}.', 
mapping=mapping)


So I think we need to signal to the messageid which variable in the 
mapping is significant for the i18n count, right?

Hanno



More information about the Zope-Dev mailing list