`render': 使用 jekyll 多语言插件时未定义的方法 `access'

`render': undefined method `access' when using jekyll multiple languages plugin

我是第一次尝试设置 jekyll-multiple-languages-plugin

example website 确实有效。虽然,我自己的网站没有。

这是输出,每当我 运行 bundle exec jekyll serve --verbose:

/var/lib/gems/2.7.0/gems/jekyll-multiple-languages-plugin-1.7.0/lib/jekyll-multiple-languages-plugin.rb:360:in `render': undefined method `access' for false:FalseClass (NoMethodError)

液体: <div class="intro-lead-in">{% t page.header.text %}</div>

pt.yml:

---
header:
  overlay: "no"
  text: It's Nice To Meet You
  button: Tell Me More
  buttonlink: "#services"
---

宝石规格:

spec.required_ruby_version = '>= 2.5.0'
spec.add_runtime_dependency "jekyll", ">= 4.0", "< 4.3"
spec.add_development_dependency "bundler", "~> 2.0"
spec.add_development_dependency "rake", "~> 13.0"

_config.yml

plugins:
  - jekyll-multiple-languages-plugin

languages: ["en", "pt"]

exclude_from_localizations: ["assets", "favicon.ico"]

由于在“jekyll-multiple-languages-plugin”中引发了异常gem让我们快速浏览一下source

# lib/jekyll-multiple-languages-plugin.rb:360
translation = site.parsed_translations[lang].access(key) if key.is_a?(String)

为了生成消息 "undefined method `access' for false:FalseClass" 这意味着 .access 被调用 false .因为上面只有一个 access 调用,这意味着 site.parsed_translations[lang] 必须评估为 false.

作为图书馆用户,您如何影响这个值?我们首先得看看这个值是怎么来的。

# lib/jekyll-multiple-languages-plugin.rb:25
site.parsed_translations[lang] = YAML.load_file("#{site.source}/_i18n/#{lang}.yml")

这意味着 false 值是解析您的 .yml 文件之一的 return 值。 YAML.load_file 文档对这个 return 值说了以下内容:

load_file(filename, fallback: false)

Load the document contained in filename. Returns the yaml contained in filename as a Ruby object, or if the file is empty, it returns the specified fallback return value, which defaults to false.

在这里我们可以看到一个空文件导致 false return 值。因此,要么您的 _i18n/pt.yml_i18n/en.yml 文件为空,要么其中的内容计算为 false。例如 YAML.load('false') #=> falseYAML.load('no') #=> false