i18n
i18n copied to clipboard
Bug: Pluralization and Fallbacks modules do not play well together
Related (RU, may want to use Google Translate): https://github.com/yaroslav/russian/issues/29#issuecomment-2693629
Summary:
pluralize method of Backend::Pluralization relies on resolving pluralize rule this way:
def pluralizer(locale)
pluralizers[locale] ||= I18n.t(:'i18n.plural.rule', :locale => locale, :resolve => false)
end
# ...
pluralizer = pluralizer(locale)
if pluralizer.respond_to?(:call)
# ... do call that ...
else
super
end
Unfortunately, if you have a locale with non-english transliteration rule as I18n default (say, :ru that may return any of [:one, :few, :many, :other]), then enable I18n fallback and use :en locale as current, Pluralization module will look up for pluralize lambda in current locale, fallback to :ru, use russian pluralization rule and fail miserably with simple :en translations (such as the ones shipped with Rails).
Now, regarding the fix.. It seems that we can't really tell if we are receiving a translation that was fallback'd, so, basically two options that come to mind (probably there is a perfect solution, but I'm not there yet):
- Load :en pluralization rule when enabling Pluralization module. That one is a bit stupid, because that won't fix anything on :en-US locale, and basically with every other locale that shares a pluralization rule with English.
- Have a key when using translations that can be taken into account by Fallbacks module (fallbacks.rb L38): this way, we can just immideately cancel searching for a translation and return the result for current locale only. I'm not sure if options[:fallback] does exactly this — seems that it is done for a different purpose of not going deep into recursive fallbacks when falling back to search at least one locale with the key. Anywho, we can document options[:fallback] or introduce options[:no_fallback](TBD naming): it's does not make much sence that options[:fallback] when set to true will skip callbacks and not vice verca.
Can implement both fixes but we probably gotta talk about this first. /cc @svenfuchs, @clemens?
/cc @josevalim
Please, fix this bug.
We still have this issue in 0.6.5. @josevalim @svenfuchs any ideas?
check this, please!
I would accept a PR to fix this issue.
Did this ever get fixed..?
@Matt-Yorkley The card's still open, so I am guessing not.