Thank you for your replies. Just to confirm, I am not referring to a perfect automatic pluralize solution. I am very well aware that a silver bullet solution would be very difficult, if even possible.
I will try make myself more clear now. What I am specifically referring to is the 'verbose_name_plural' of the model. This is what I have in mind: 1. Django initializes (contributes) the 'verbose_name_plural' on model class with a call to the pluralize logic to attempt find the relevant plural for the given singular. 2. If need be, developer overrides the 'verbose_name_plural' in the model to define specialized plural. 3. Developer calls model_obj.verbose_name_plural in template. Here is an example adapted from the "Diving into Python" book regarding the pluralization that I have in mind: ######### plural.py ######### import re def _regex_rules(lang): rules_file = file("manager/pluralrules/%s" % lang) for line in rules_file: pattern, search, replace = line.split() yield lambda word: re.search(pattern, word) and re.sub(search, replace, word) rules_file.close() def pluralize(noun, lang='en'): """Returns a plural of a given noun""" for rule in _regex_rules(lang): result = rule(noun) if result: return result ######### end - plural.py ######### ######### ./pluralrules/en ######### [ml]ouse$ ([ml])ouse$ \1ice child$ child$ children booth$ booth$ booths foot$ foot$ feet ooth$ ooth$ eeth l[eo]af$ l([eo])af$ l\1aves sis$ sis$ ses man$ man$ men ife$ ife$ ives eau$ eau$ eaux lf$ lf$ lves [sxz]$ $ es [^aeioudgkprt]h$ $ es (qu|[^aeiou])y$ y$ ies $ $ s ######### end - ./pluralrules/en ######### Change in the Django code ######### django/db/models/options.py ########## Replace: ------------------- setattr(self, 'verbose_name_plural', meta_attrs.pop('verbose_name_plural', string_concat(self.verbose_name, 's'))) With something like: ------------------- setattr(self, 'verbose_name_plural', meta_attrs.pop('verbose_name_plural', pluralize(self.verbose_name, get_locale_code()))) *Note: get_locale_code() would return the current locale code (e.g. 'en' for English). ############################################# As you can see in the django/db/models/options.py, a model class contribution is made by adding the attribute 'verbose_name_plural' with a simple 's' character append logic. I believe we can handle more than just 's' on initialization with a similar example as above. (Was very tempted to use the word 'simple' again. Can't stand the heat though. :-)) Regards, -Alen Ribic On May 5, 4:57 am, "Russell Keith-Magee" <[EMAIL PROTECTED]> wrote: > On Mon, May 5, 2008 at 1:16 AM, [EMAIL PROTECTED] > > <[EMAIL PROTECTED]> wrote: > > > > Is it? Maybe. I don't know if anyone has proposed smartening-up > > Django's > > > pluralization rules in the past > > > I had a look through the mailing-list archive and couldn't spot > > anything directly related. > > Then you haven't looked too hard. Pluralization comes up regularly, > both in the context of the pluralize filter, and the > verbose_name/verbose_name_plural option. And if you're calling > pluralization a simple task, you _really_ haven't done your research. > > The short version is that pluralization is _hard_. Automatic > pluralization, which seems to be what you want, is an effectively > impossible task, especially in English. English doesn't have regular > rules for pluralization for anything but trivial cases. About the only > way to do it effectively is to have a dictionary of all possible > plurals - and then you hit the religious wars over whether the plural > of octopus is octopus, octopuses, or octopodes. > > Even if you could get English sorted out, then you get the i18n > problem. A few eastern European languages have some very interesting > pluralization rules which further complicates the dream of an > automatic solution. > > So, we have settled with the a naive solution, manually assisted, with > template helpers that cover 95% of cases. "Add an s" works for a good > majority of cases - if that isn't correct, you can manually correct it > in verbose_name_plural. The template filter can handle all the english > cases (worst case being different extensions for 1 and many). This > doesn't cover the needs of the previously mentioned eastern European > languages, but accommodating those languages while keeping the simple > case simple is almost impossible, so users of those languages can > write a custom template tag if they need one. > > Yours, > Russ Magee %-) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---