ruby - `render':使用 jekyll 多语言插件时未定义的方法 `access'
问题描述
我正在尝试第一次设置jekyll-multiple-languages-plugin。
示例网站确实有效。虽然,我自己的网站没有。
这是输出,每当我运行时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假:假类(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 中引发了异常,让我们快速查看一下源代码。
# lib/jekyll-multiple-languages-plugin.rb:360
translation = site.parsed_translations[lang].access(key) if key.is_a?(String)
为了生成消息“未定义的方法 `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
. 将包含的 yamlfilename
作为 Ruby 对象返回,或者如果文件为空,则返回指定的fallback
返回值,默认为false
.
在这里我们可以看到一个空文件导致false
返回值。因此,您的_i18n/pt.yml
or_i18n/en.yml
文件为空或其中的内容评估为false
. 例子是YAML.load('false') #=> false
和YAML.load('no') #=> false
推荐阅读
- php - 为什么从只读的 php 文件中回显输入会在一行上打印?
- php - Symfony 向多个收件人发送电子邮件 SwiftMailer
- javascript - libuv和V8中的NodeJs事件循环?
- r - 使用gtsummary :: tbl_svy_summary时如何报告未加权的缺失值数量?
- java - 使用 Maven 创建带有依赖项的 jar 时,“错误:缺少 JavaFX 运行时组件,需要运行此应用程序”
- r - R中列表的Rowbind列表
- regex - powershell 正则表达式错误
- javascript - 如何删除树中的单身儿童?
- typescript - 打字稿泛型作为对象键名
- mysql - 具有两个 IN 运算符的 SQL 查询,比较按索引执行