I can't tell if http://docs.python.org/library/gettext.html does it.... does it?
On Wed, Dec 10, 2008 at 10:23 AM, achipa <[EMAIL PROTECTED]> wrote: > > Here are some details if some is interested in more details: > > http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html > > Also, there is a python-babel module which good for both I18N and > L10N, might be good for inclusion or at least inspiration. > > On Dec 10, 4:59 pm, mdipierro <[EMAIL PROTECTED]> wrote: > > I agree there is a problem. I do not have a better solution. How does > > gettext handle this case? Can you provide an example? > > > > Massimo > > > > On Dec 10, 9:10 am, achipa <[EMAIL PROTECTED]> wrote: > > > > > 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 -~----------~----~----~----~------~----~------~--~---

