Just to see how bad it gets (then you'll understand why you don't want
to deal with this outside of T()):

English:
0 dogs
1 dog
2 dogs

Hungarian
Nincs kutya
1 kutya
2 kutya
3 kutya

Croatian
Nema pasa
1 pas
2..4 psa
5 pasa

... and every time you think you have covered all the cases, a
language pops up that breaks these. That's why I18N was born :)

On Dec 10, 3:54 pm, achipa <[EMAIL PROTECTED]> wrote:
> Still not good (enough), see my first post. This is good only for
> english. The coder should be isolated from the language and it's
> quirks. In most slavic languages for your example you would have 4
> cases, not 2. Also, most languages do not use 0 (e.g. you would have
> to say the equivalent of 'No dogs found'). Bottom line reiterated -
> the translation module should allow the translators to adapt the
> application's output to the user, it's not the coder's responsibility
> to think about plurals, nouns, language families, etc.
>
> On Dec 10, 3:40 pm, mdipierro <[EMAIL PROTECTED]> wrote:
>
> > text=T("you have 1 dog") if x==1 else T("you have %s dogs",x)
>
> > Massimo
>
> > On Dec 10, 8:31 am, achipa <[EMAIL PROTECTED]> wrote:
>
> > > OK, this answers the (a) of my post (I could have sworn I tried that
> > > too, oh well), but how would you do (b) ? x=%.2f just outputs the
> > > number, but doesn't interpret it with regard to translation. T("%d
> > > files copied", numcopy) should return '1 file copied' if numcopy is 1,
> > > and '[numcopy] fileS copied' if numcopy is > 1 (or zero !).
>
> > > On Dec 10, 3:25 pm, mdipierro <[EMAIL PROTECTED]> wrote:
>
> > > > You can do all that. Here are some examples:
>
> > > >     name="Achipa"
> > > >     T("Hello %s",name)
> > > >     T("Hello %(name)s",dict(name=name))
> > > >      x=0.123515
> > > >     T("x=%.2f",x)
>
> > > > Massimo
>
> > > > On Dec 10, 4:40 am, achipa <[EMAIL PROTECTED]> wrote:
>
> > > > > I know we T() for this, but there are some shortcoming. As I'm dealing
> > > > > with more languages than it's probably healthy, the T() approach seems
> > > > > to have significant drawbacks compared to good (?) old gettext. I want
> > > > > to see whether some solutions already exist that I don't know about,
> > > > > or we need to do something about this to accomodate.
>
> > > > > a) string arguments. I tried something along the lines of T('User %s
> > > > > not available') % username, but that's a no go (TypeError: unsupported
> > > > > operand type(s) for %: 'lazyT' and 'str'). Obviously If I do the
> > > > > replacement within T, I cannot translate the string. I know I could
> > > > > rearrange the text so the parameter comes up on the beginning or the
> > > > > end of the string, but I'm talking concepts here. Preferably, this
> > > > > should work with dict arguments to be able to preserve word ordering
> > > > > and make translations easier. (think '%(obj)s not found in %(loc)s',
> > > > > some languages will have the parameters reversed). T('text with
> > > > > parameters', mydict) would be also ok.
>
> > > > > b) numerical parameters. It gets even more complex here. Unfortunately
> > > > > some words change shape depending on argument value (in english, this
> > > > > would be the plural 's' on the end). Some languages don't have this
> > > > > (like hungarian), others have a more complex scheme (like russian with
> > > > > 3 plurals). Gettext gets around this by having a ngettext, which takes
> > > > > a parameter, like ngettext('% files copied', n) which returns the
> > > > > string for the particular argument value. This is regulated through a
> > > > > header (an example for aforementioned russian):
>
> > > > >  Plural-Forms: nplurals=3; \
> > > > >               plural=n%10==1 && n%100!=11 ? 0 : \
> > > > >                      n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ?
> > > > > 1 : 2;
>
> > > > > For this functionality we probably we either need to change how T()
> > > > > works, or make a two-parameter NT() and have a special dict for that
> > > > > (just a mockup idea, the selector could of course be a separate dict
> > > > > in itself):
> > > > > {
> > > > >   '%s kralj_selector' : logical-expression-similar-to-the-example-
> > > > > above
> > > > >   '%s kralj' : ('%s kralj', '%s kralja', '%s kraljeva')
>
> > > > > }
>
> > > > > I'd like to keep the logic as close to that of gettext's to able to
> > > > > make a convertes as there are thousands of gettext editors translators
> > > > > are familiar with, it would be a shame to use a scheme which could not
> > > > > be converted back and forth.
>
> > > > > Thoughts, comments ?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to