i18n icon indicating copy to clipboard operation
i18n copied to clipboard

Bug: Pluralization and Fallbacks modules do not play well together

Open yaroslav opened this issue 13 years ago • 8 comments

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):

  1. 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.
  2. 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?

yaroslav avatar Nov 21 '11 22:11 yaroslav

/cc @josevalim

yaroslav avatar Nov 22 '11 13:11 yaroslav

Please, fix this bug.

sashazykov avatar Aug 09 '12 08:08 sashazykov

We still have this issue in 0.6.5. @josevalim @svenfuchs any ideas?

kirs avatar Oct 23 '13 07:10 kirs

check this, please!

sponomarev avatar Jun 09 '15 08:06 sponomarev

I would accept a PR to fix this issue.

radar avatar Nov 20 '16 22:11 radar

Did this ever get fixed..?

Matt-Yorkley avatar Nov 18 '20 19:11 Matt-Yorkley

@Matt-Yorkley The card's still open, so I am guessing not.

radar avatar Nov 18 '20 22:11 radar