ruby-i18n / i18n

Internationalization (i18n) library for Ruby
MIT License
977 stars 408 forks source link

Ruby 3.1.2: Still getting ArgumentError: wrong number of arguments (given 2, expected 1) #638

Closed svpersteve closed 1 year ago

svpersteve commented 1 year ago

What I tried to do

We're upgrading to Ruby 3.1.2 (from 2.7.3) and we're still getting argument errors for several calls to I18n.translate in our controllers. They all look similar to this:

t("update.success", model: Diagnosis.model_name.human)

We've tried renaming 'model' to something arbitrary. Also it only seems to happen in controllers, in the views we're using translations in the same way and it works fine (slim template):

      = link_to t("action.edit_model",
        model: ClinicalTeam.model_name.human),
        edit_team_clinical_team_path(@clinical_team),
        class: "secondary-button small-button"

What I expected to happen

It to work as it did in Ruby 2.7.

We thought this was fixed in 1.8.6 (and 1.8.2?). Upgrading to the latest version causes other breaking changes we'd like to deal with later. We can see nobody else seems to have this issue though so it's probably something we've done/not done...

What actually happened

  1) Diagnosis update endpoint when authenticated presents a form that can be used to update an existing Diagnosis
     Failure/Error: redirect_to team_diagnoses_path, notice: t("update.success", model: Diagnosis.model_name.human)

     ArgumentError:
       wrong number of arguments (given 2, expected 1)

Versions of i18n, rails, and anything else you think is necessary

I18n 1.8.6, Rails 7.0.3.1, Ruby 3.1.2

Note we've forced Psych to stay on v3 because of other breaking changes, wondering if it's that. I'm going to try upgrading to 4.

radar commented 1 year ago

Please provide the stack trace for this exception

Ryan On 7 Oct 2022 at 00:27 +1100, Steve Brewer @.***>, wrote:

What I tried to do We're upgrading to Ruby 3.1.2 (from 2.7.3) and the last argument error to fix is for calls to I18n.translate. We have several that are giving the above argument error and we can't figure out why. The failing code all look similar to this: t("update.success", model: Diagnosis.model_name.human) What I expected to happen It to work as it did in Ruby 2.7. We thought this was fixed in 1.8.6 (and 1.8.2?). Upgrading to the latest version causes other breaking changes we'd like to deal with later. We can see nobody else seems to have this issue though so it's probably something we've done/not done... What actually happened 1) Diagnosis update endpoint when authenticated presents a form that can be used to update an existing Diagnosis Failure/Error: redirect_to team_diagnoses_path, notice: t("update.success", model: Diagnosis.model_name.human)

ArgumentError:
  wrong number of arguments (given 2, expected 1)

Versions of i18n, rails, and anything else you think is necessary 1.8.6 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

svpersteve commented 1 year ago
[actionpack (7.0.3.1) lib/abstract_controller/translation.rb:17:in `translate'](http://localhost:3000/team/adir_report_templates#)
[rectify (0.8.0) lib/rectify/command.rb:22:in `method_missing'](http://localhost:3000/team/adir_report_templates#)
[app/controllers/team/adir_report_templates_controller.rb:17:in `block (2 levels) in update'](http://localhost:3000/team/adir_report_templates#)
[wisper (1.6.1) lib/wisper/registration/block.rb:5:in `broadcast'](http://localhost:3000/team/adir_report_templates#)
[wisper (1.6.1) lib/wisper/publisher.rb:65:in `block in broadcast'](http://localhost:3000/team/adir_report_templates#)
[/Users/stevebrewer/.rvm/rubies/ruby-3.1.2/lib/ruby/3.1.0/set.rb:511:in `each_key'](http://localhost:3000/team/adir_report_templates#)
[/Users/stevebrewer/.rvm/rubies/ruby-3.1.2/lib/ruby/3.1.0/set.rb:511:in `each'](http://localhost:3000/team/adir_report_templates#)
[wisper (1.6.1) lib/wisper/publisher.rb:64:in `broadcast'](http://localhost:3000/team/adir_report_templates#)
[app/core/adirs/update_question_options.rb:14:in `call'](http://localhost:3000/team/adir_report_templates#)
[rectify (0.8.0) lib/rectify/command.rb:8:in `call'](http://localhost:3000/team/adir_report_templates#)
[app/controllers/team/adir_report_templates_controller.rb:15:in `update'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/abstract_controller/base.rb:215:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/rendering.rb:53:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:234:in `block in process_action'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:118:in `block in run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[app/controllers/application_controller.rb:22:in `set_sentry_context'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[audited (5.0.2) lib/audited/sweeper.rb:16:in `around'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[audited (5.0.2) lib/audited/sweeper.rb:16:in `around'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:138:in `run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/abstract_controller/callbacks.rb:233:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/rescue.rb:22:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/notifications.rb:206:in `block in instrument'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/notifications.rb:206:in `instrument'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/instrumentation.rb:66:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[activerecord (7.0.3.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/abstract_controller/base.rb:151:in `process'](http://localhost:3000/team/adir_report_templates#)
[actionview (7.0.3.1) lib/action_view/rendering.rb:39:in `process'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal.rb:188:in `dispatch'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_controller/metal.rb:251:in `dispatch'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `each'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/journey/router.rb:32:in `serve'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/routing/route_set.rb:852:in `call'](http://localhost:3000/team/adir_report_templates#)
[bullet (7.0.1) lib/bullet/rack.rb:15:in `call'](http://localhost:3000/team/adir_report_templates#)
[flipper (0.24.0) lib/flipper/middleware/memoizer.rb:77:in `memoized_call'](http://localhost:3000/team/adir_report_templates#)
[flipper (0.24.0) lib/flipper/middleware/memoizer.rb:42:in `call'](http://localhost:3000/team/adir_report_templates#)
[omniauth (2.0.4) lib/omniauth/strategy.rb:202:in `call!'](http://localhost:3000/team/adir_report_templates#)
[omniauth (2.0.4) lib/omniauth/strategy.rb:169:in `call'](http://localhost:3000/team/adir_report_templates#)
[omniauth (2.0.4) lib/omniauth/builder.rb:45:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/tempfile_reaper.rb:15:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/etag.rb:27:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/conditional_get.rb:40:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/head.rb:12:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/http/content_security_policy.rb:36:in `call'](http://localhost:3000/team/adir_report_templates#)
[message_bus (3.3.8) lib/message_bus/rack/middleware.rb:61:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/session/abstract/id.rb:266:in `context'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/session/abstract/id.rb:260:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/cookies.rb:697:in `call'](http://localhost:3000/team/adir_report_templates#)
[activerecord (7.0.3.1) lib/active_record/migration.rb:603:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/callbacks.rb:99:in `run_callbacks'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/executor.rb:14:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'](http://localhost:3000/team/adir_report_templates#)
[sentry-rails (5.4.1) lib/sentry/rails/rescued_exception_interceptor.rb:12:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'](http://localhost:3000/team/adir_report_templates#)
[web-console (4.2.0) lib/web_console/middleware.rb:132:in `call_app'](http://localhost:3000/team/adir_report_templates#)
[web-console (4.2.0) lib/web_console/middleware.rb:28:in `block in call'](http://localhost:3000/team/adir_report_templates#)
[web-console (4.2.0) lib/web_console/middleware.rb:17:in `catch'](http://localhost:3000/team/adir_report_templates#)
[web-console (4.2.0) lib/web_console/middleware.rb:17:in `call'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry/rack/capture_exceptions.rb:28:in `block (2 levels) in call'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry/hub.rb:199:in `with_session_tracking'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry-ruby.rb:372:in `with_session_tracking'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry/rack/capture_exceptions.rb:19:in `block in call'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry/hub.rb:59:in `with_scope'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry-ruby.rb:352:in `with_scope'](http://localhost:3000/team/adir_report_templates#)
[sentry-ruby (5.4.1) lib/sentry/rack/capture_exceptions.rb:18:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'](http://localhost:3000/team/adir_report_templates#)
[railties (7.0.3.1) lib/rails/rack/logger.rb:40:in `call_app'](http://localhost:3000/team/adir_report_templates#)
[railties (7.0.3.1) lib/rails/rack/logger.rb:25:in `block in call'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/tagged_logging.rb:114:in `block in tagged'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/tagged_logging.rb:38:in `tagged'](http://localhost:3000/team/adir_report_templates#)
[activesupport (7.0.3.1) lib/active_support/tagged_logging.rb:114:in `tagged'](http://localhost:3000/team/adir_report_templates#)
[railties (7.0.3.1) lib/rails/rack/logger.rb:25:in `call'](http://localhost:3000/team/adir_report_templates#)
[sprockets-rails (3.4.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/method_override.rb:24:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/runtime.rb:22:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/executor.rb:14:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/static.rb:23:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack (2.2.4) lib/rack/sendfile.rb:110:in `call'](http://localhost:3000/team/adir_report_templates#)
[actionpack (7.0.3.1) lib/action_dispatch/middleware/host_authorization.rb:137:in `call'](http://localhost:3000/team/adir_report_templates#)
[message_bus (3.3.8) lib/message_bus/rack/middleware.rb:61:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'](http://localhost:3000/team/adir_report_templates#)
[rack-mini-profiler (2.3.2) lib/mini_profiler/profiler.rb:384:in `call'](http://localhost:3000/team/adir_report_templates#)
[webpacker (5.4.3) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'](http://localhost:3000/team/adir_report_templates#)
[rack-proxy (0.7.2) lib/rack/proxy.rb:67:in `call'](http://localhost:3000/team/adir_report_templates#)
[railties (7.0.3.1) lib/rails/engine.rb:530:in `call'](http://localhost:3000/team/adir_report_templates#)
[puma (4.3.12) lib/puma/configuration.rb:228:in `call'](http://localhost:3000/team/adir_report_templates#)
[puma (4.3.12) lib/puma/server.rb:727:in `handle_request'](http://localhost:3000/team/adir_report_templates#)
[puma (4.3.12) lib/puma/server.rb:476:in `process_client'](http://localhost:3000/team/adir_report_templates#)
[puma (4.3.12) lib/puma/server.rb:332:in `block in run'](http://localhost:3000/team/adir_report_templates#)
[puma (4.3.12) lib/puma/thread_pool.rb:134:in `block in spawn_thread'](http://localhost:3000/team/adir_report_templates#)
radar commented 1 year ago

Took these steps to reproduce:

  1. Generated a new Rails application with --minimal, the Gemfile beginning with:
ruby "3.1.2"
gem "rails", "~> 7.0.3.1"
gem "i18n", "1.8.6"

Updated ApplicationController to be:

class ApplicationController < ActionController::Base
  def index
    redirect_to "/show", notice: t("update.success", model: Diagnosis.model_name.human)
  end

  def show
  end
end

Defined routes:

  root to: "application#index"
  get "/show", to: "application#show"

Defined translation:

en:
  update:
    success: "%{model} was updated successfully."

Defined a view to show the flash message.

Navigated to http://localhost:3000. Saw the flash message appear. No exception.


Are you able to reproduce this issue within a new Rails app?

henriquesml commented 1 year ago

I have the same problem, my app has rails 7.0.4, ruby 3.0.4 and i18n 1.12.0. Any soluction for that?

svpersteve commented 1 year ago

It turned out one of our gems was using an earlier version of Ruby and code executed from within a block via that gem was causing this

radar commented 1 year ago

Ok, I'm going to close this issue now.

iagopuccini commented 12 months ago

It turned out one of our gems was using an earlier version of Ruby and code executed from within a block via that gem was causing this

Do you remember which gem is causing this? I have the same issue here after upgrading my ruby version.

mailbaoer commented 11 months ago

I have the same issue here after upgrading my ruby version too

radar commented 11 months ago

Please open a new issue with a reproducible example if you can.

defsprite commented 9 months ago

I got stumped by this as well - this is probably caused by application code that improperly passes keyword arguments, like this:

def my_t(*args)
  I18n.send :t, *args
end
def my_t(key, options)
  I18n.t(key, options)
end

will not work any longer as of Ruby 3.0, as you'll need to do something like the following (haven't tested this, may still not be fully correct)

def my_t(*args, **kwargs)
  I18n.send :t, *args, **kwargs
end
def my_t(key, options)
  I18n.t(key, **options)
end