如何解决`render':使用 jekyll 多语言插件时未定义的方法 `access' load_file(filename, fallback: false)
我是第一次尝试设置 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': 未定义的方法 ` 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
文件之一的返回值。 YAML.load_file
文档对此返回值做了以下说明:
load_file(filename,fallback: false)
加载包含在 filename
中的文档。返回包含在的 yaml
filename
作为 Ruby 对象,或者如果文件为空,则返回
指定的 fallback
返回值,默认为 false
。
在这里我们可以看到一个空文件导致一个 false
返回值。因此,要么您的 _i18n/pt.yml
或 _i18n/en.yml
文件为空,要么其中的内容评估为 false
。例如 YAML.load('false') #=> false
和 YAML.load('no') #=> false
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。