Ruby `渲染';:未定义的方法'access';使用jekyll多语言插件时

Ruby `渲染';:未定义的方法'access';使用jekyll多语言插件时,ruby,rubygems,jekyll,jekyll-extensions,Ruby,Rubygems,Jekyll,Jekyll Extensions,我第一次尝试设置 确实是这样。虽然,我自己的网站没有 每当我运行bundle exec jekyll service--verbose时,这就是输出: /var/lib/gems/2.7.0/gems/jekyll-multiple-languages-plugin-1.7.0/lib/jekyll-multiple-languages-plugin.rb:360:in“render”:未定义false:false类的“access”方法(NoMethodError) 液体: {%t page.

我第一次尝试设置

确实是这样。虽然,我自己的网站没有

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

/var/lib/gems/2.7.0/gems/jekyll-multiple-languages-plugin-1.7.0/lib/jekyll-multiple-languages-plugin.rb:360:in“render”:未定义false:false类的“access”方法(NoMethodError)

液体:
{%t page.header.text%}

pt.yml:

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

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"

由于异常是在“jekyll multiple languages plugin”gem中提出的,所以让我们快速查看一下

为了生成消息“未定义的方法'access'for false:false class”,这意味着调用
.access
。因为上面只有一个
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
文件的返回值。
YAML.load\u文件
说明了有关此返回值的以下内容:

加载
文件名
中包含的文档。返回中包含的yaml
filename
作为Ruby对象,或者如果文件为空,则返回 指定的
fallback
返回值,默认为
false


在这里,我们可以看到一个空文件会导致
false
返回值。因此,您的
\u i18n/pt.yml
\u i18n/en.yml
文件为空,或者其中的内容计算结果为
false
。例如
YAML.load('false')#=>false
YAML.load('no')#=>false

您定义了两种语言“en”和“pt”,您是否同时存在
pt.yml
en.yml
文件?如果是,两个文件是否包含相同的密钥?@3limin4t0r是,对于这两个问题。问题仅在删除
{%t page.header.text%}
后才会停止,这没有帮助,因为我需要使用它来翻译页面。这很奇怪,因为只有在返回
false
时才会发生。该值与调用的结果相关联。因此,您可能有一个空文件,或者该文件不在正确的目录中。@3limin4t0r不必担心。一开始我不理解你。事实上,这就是问题所在。请随意创建一个答案。
# lib/jekyll-multiple-languages-plugin.rb:360
translation = site.parsed_translations[lang].access(key) if key.is_a?(String)
# lib/jekyll-multiple-languages-plugin.rb:25
site.parsed_translations[lang] = YAML.load_file("#{site.source}/_i18n/#{lang}.yml")