kurtsson / jekyll-multiple-languages-plugin

I18n support for Jekyll and Octopress
MIT License
922 stars 203 forks source link

no implicit conversion of nil into String since 1.8.0 #201

Open sedrubal opened 2 years ago

sedrubal commented 2 years ago

I updated to the latest version of jekyll-multiple-languages-plugin (1.8.0) and now I'm experiencing this error:

$ bundle exec jekyll build --trace
Configuration file: <website-root>/_config.yml
            Source: <website-root>
       Destination: <website-root>/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
Building site for language: "de" to: <website-root>/_site
       Jekyll Feed: Generating feed for posts
Loading translation from file <website-root>/_i18n/de.yml
Missing i18n key: de:<omitted>
Using translation '' from default language: de
  Liquid Exception: no implicit conversion of nil into String in <website-root>/_layouts/default.html
bundler: failed to load command: jekyll (<website-root>/.bundle/ruby/3.0.0/bin/jekyll)
<website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:632:in `initialize': no implicit conversion of nil into String (TypeError)
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:632:in `initialize'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:649:in `new'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:649:in `translate'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:406:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:103:in `render_node_to_output'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:91:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:208:in `block in render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:242:in `with_profiling'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:207:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:220:in `render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:39:in `block (3 levels) in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:59:in `measure_counts'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:38:in `block (2 levels) in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:63:in `measure_bytes'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:37:in `block in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:70:in `measure_time'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:36:in `render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/inclusion.rb:16:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/tags/include.rb:208:in `block in render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/context.rb:123:in `stack'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/tags/include.rb:206:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:103:in `render_node_to_output'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:91:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:208:in `block in render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:242:in `with_profiling'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:207:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/liquid-4.0.3/lib/liquid/template.rb:220:in `render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:39:in `block (3 levels) in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:59:in `measure_counts'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:38:in `block (2 levels) in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:63:in `measure_bytes'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:37:in `block in render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:70:in `measure_time'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/liquid_renderer/file.rb:36:in `render!'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/renderer.rb:131:in `render_liquid'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/renderer.rb:194:in `render_layout'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/renderer.rb:163:in `place_in_layouts'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/renderer.rb:93:in `render_document'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/renderer.rb:63:in `run'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:547:in `render_regenerated'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:532:in `block (2 levels) in render_docs'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:531:in `each'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:531:in `block in render_docs'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:530:in `each_value'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:530:in `render_docs'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:210:in `render'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/site.rb:80:in `process'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:185:in `block in process'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:171:in `each'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-multiple-languages-plugin-1.8.0/lib/jekyll-multiple-languages-plugin.rb:171:in `process'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/command.rb:28:in `process_site'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/commands/build.rb:65:in `build'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/commands/build.rb:36:in `process'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/command.rb:91:in `block in process_with_graceful_fail'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/command.rb:91:in `each'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/command.rb:91:in `process_with_graceful_fail'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/lib/jekyll/commands/build.rb:18:in `block (2 levels) in init_with_program'
        from <website-root>/.bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `block in execute'
        from <website-root>/.bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `each'
        from <website-root>/.bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary/command.rb:221:in `execute'
        from <website-root>/.bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary/program.rb:44:in `go'
        from <website-root>/.bundle/ruby/3.0.0/gems/mercenary-0.4.0/lib/mercenary.rb:21:in `program'
        from <website-root>/.bundle/ruby/3.0.0/gems/jekyll-4.2.1/exe/jekyll:15:in `<top (required)>'
        from <website-root>/.bundle/ruby/3.0.0/bin/jekyll:25:in `load'
        from <website-root>/.bundle/ruby/3.0.0/bin/jekyll:25:in `<top (required)>'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `load'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `kernel_load'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:23:in `run'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli.rb:477:in `exec'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli.rb:31:in `dispatch'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/cli.rb:25:in `start'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/exe/bundle:49:in `block in <top (required)>'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
        from /usr/lib/ruby/gems/3.0.0/gems/bundler-2.2.26/exe/bundle:37:in `<top (required)>'
        from /usr/bin/bundle:23:in `load'
        from /usr/bin/bundle:23:in `<main>'
$ bundle exec jekyll --version
jekyll 4.2.1

Unfortunately I don't know anything about ruby to debug this issue... Downgrading to 1.7.0 fixes this issue for me (gem 'jekyll-multiple-languages-plugin', "<1.8.0" in Gemfile).

obilodeau commented 2 years ago

Same problem here. Thanks for the workaround @sedrubal!

GautierDig commented 2 years ago

Same issue here

team-community commented 2 years ago

In my case, it's obviously related to jekyll paginate v2. Because when generating "Page 2", this plugin thinks that there is a empty string. Version 1.7.0 works.

s-gbz commented 2 years ago

Downgrading to 1.7.0 fixes this issue for me (gem 'jekyll-multiple-languages-plugin', "<1.8.0" in Gemfile).

Thanks a lot for the quick-solution!

figgles commented 11 months ago
Missing i18n key: de:<omitted>
Using translation '' from default language: de
Liquid Exception: no implicit conversion of nil into String in 

This message is what you see when a string is missing from the default language. There is no check to see if the lookup from the default language (which could be the same as the current language) gives nil. This should probably display a warning that there is no translation but not crash or give a cryptic error message like this.