I18n translate: one, other more?

Hello,

I would like to have a range of strings being returned using t() function from I18n.

Example: t('health', :count => 0) # dead t('health', :count => 1) # injured t('health', :count => 2) # not well t('health', :count => 3) # so so t('health', :count => 4) # just fine t('health', :count => 5) # good t('health', :count => 6) # great etc.

By default it only supports one and other. Is there a way to make it work with many different counts? If not, what else could I do to make this work?

Thanks in advance, Hans

Heinz Strunk wrote in post #967521:

Hello,

I would like to have a range of strings being returned using t() function from I18n.

Example: t('health', :count => 0) # dead t('health', :count => 1) # injured t('health', :count => 2) # not well t('health', :count => 3) # so so t('health', :count => 4) # just fine t('health', :count => 5) # good t('health', :count => 6) # great etc.

DON'T DO THIS! This is a completely inappropriate use of t().

Instead, have a helper function that takes a number and returns the appropriate string. Could be as simple as def health(count)   statuses = ['dead', 'injured', 'not well'...]   statues[count] end

By default it only supports one and other. Is there a way to make it work with many different counts? If not, what else could I do to make this work?

Thanks in advance, Hans

Again, don't abuse I18N for this. But if you *do* have a legitimate need for such a feature (say, different single, dual, and plural forms, as in Arabic), then use a gettext-based solution (such as fast_gettext) instead of Rails' own I18N backend. Among its other advantages, gettext handles different pluralizations better.

Best,

DON'T DO THIS! This is a completely inappropriate use of t().

Instead, have a helper function that takes a number and returns the appropriate string. Could be as simple as def health(count)   statuses = ['dead', 'injured', 'not well'...]   statues[count] end

Looks a lot more reasonable, thanks!