diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index ef4d9c26..35ab0f85 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -17,6 +17,7 @@ jobs: strategy: fail-fast: false matrix: + rubyopt: [""] ruby_version: [head, 3.4, 3.3, 3.2, jruby] gemfile: - Gemfile @@ -34,6 +35,10 @@ jobs: gemfile: gemfiles/Gemfile.rails-8.0.x - ruby_version: jruby gemfile: gemfiles/Gemfile.rails-main + include: + - ruby_version: 3.4 + gemfile: Gemfile + rubyopt: "--enable-frozen-string-literal --debug-frozen-string-literal" runs-on: ubuntu-latest diff --git a/lib/i18n/backend/interpolation_compiler.rb b/lib/i18n/backend/interpolation_compiler.rb index e37b6799..0e5c8727 100644 --- a/lib/i18n/backend/interpolation_compiler.rb +++ b/lib/i18n/backend/interpolation_compiler.rb @@ -25,6 +25,7 @@ module Compiler def compile_if_an_interpolation(string) if interpolated_str?(string) + string = +string string.instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ def i18n_interpolate(v = {}) "#{compiled_interpolation_body(string)}" diff --git a/lib/i18n/tests/interpolation.rb b/lib/i18n/tests/interpolation.rb index 03c67db7..991c4ecd 100644 --- a/lib/i18n/tests/interpolation.rb +++ b/lib/i18n/tests/interpolation.rb @@ -89,14 +89,14 @@ module Interpolation end test "interpolation: ASCII strings in the backend should be encoded to UTF8 if interpolation options are in UTF8" do - I18n.backend.store_translations 'en', 'encoding' => ('%{who} let me go'.force_encoding("ASCII")) + I18n.backend.store_translations 'en', 'encoding' => ('%{who} let me go'.dup.force_encoding(Encoding::US_ASCII)) result = I18n.t 'encoding', :who => "måmmå miå" assert_equal Encoding::UTF_8, result.encoding end test "interpolation: UTF8 strings in the backend are still returned as UTF8 with ASCII interpolation" do I18n.backend.store_translations 'en', 'encoding' => 'måmmå miå %{what}' - result = I18n.t 'encoding', :what => 'let me go'.force_encoding("ASCII") + result = I18n.t 'encoding', :what => 'let me go'.dup.force_encoding(Encoding::US_ASCII) assert_equal Encoding::UTF_8, result.encoding end @@ -172,7 +172,7 @@ def capture(stream) end def euc_jp(string) - string.encode!(Encoding::EUC_JP) + string.encode(Encoding::EUC_JP) end def interpolate(*args) diff --git a/test/backend/metadata_test.rb b/test/backend/metadata_test.rb index 44612cf0..84507c0d 100644 --- a/test/backend/metadata_test.rb +++ b/test/backend/metadata_test.rb @@ -38,7 +38,7 @@ def setup end test "pluralization adds the count to metadata on Strings" do - assert_equal(1, I18n.t(:missing, :count => 1, :default => { :one => 'foo' }).translation_metadata[:count]) + assert_equal(1, I18n.t(:missing, :count => 1, :default => { :one => +'foo' }).translation_metadata[:count]) end test "metadata works with frozen values" do