I have been pondering and have a simpler implementation, I hope. The goal is to capitalize on our strength, the excellent localization UI, and not spend time on wheel re-invention:
1) keys can be designated "pluralizable". This can be done in the
admin UI for the English version (similar to description) and is
stored in the catalog files.
2) When a translator accesses a pluralizable key, they see the
appropriate number of versions for their locale. ie, a German
translator will see two versions, a plural and a singular; a Chinese
translator only one version; a Polish translator, three versions:
singular, plural, and genitive (for 2-4). (This is determined by
calling a function from gettext or equivalent program.)
3) Pluralized keys are accessed via a new option for lang::message::lookup, "-number". Pluralized localizations must happen in TCL, not ADP. The syntax is [_ keyname -num x], where -num is an optional
parameter to the localize function. Locale and other optional
parameters remain optional. -num defaults to the plural form.
This function should call gettext or whatever we end up using and
send in the number, the locale, and all available forms of the
key. These forms are also stored in the catalog files.
4) if the pluralizer localizer calls for a form which is not
localized, it should then fall back through the locales using the
existing scheme. Ie, if it is pluralizing/localizing foo for
de_CH (Swiss German), and only the singular form of foo is
localized to de_DE, it should succeed fully for n=1; for n=2 it
should fall back to German German if that is the default locale for
de and is available in plural; if not, it should fall back to the
English plural.