Я пишу пользовательский тег Jekyll, который принимает две переменные (текст и язык) и переводит текст на предоставленный язык.Прокрутка через вложенные элементы JSON и поиск значения для пользовательского тега Jekyll
Например, {% localize next de %}
должен возвращать "Weiter", учитывая этот localization.json файл:
{
"prev": [{
"en": "Prev"
}, {
"de": "Zurück"
}, {
"ko": "이전"
}],
"next": [{
"en": "Next"
}, {
"de": "Weiter"
}, {
"ko": "다음"
}]
}
код плагина находится в Ruby:
module Jekyll
class LocalizeTag < Liquid::Tag
def initialize(tag_name, variables, tokens)
super
@variables = variables.split(" ")
@string = @variables[0]
@language = @variables[1]
@words = JSON.parse(IO.read('localization.json'))
@word = @words[@string]
@word.each do |record|
@record = record[@language]
end
end
def render(context)
"#{@record}"
end
end
end
Liquid::Template.register_tag('localize', Jekyll::LocalizeTag)
до @word
, это хорошо, но всякий раз, когда у меня есть этот вложенный массив, я не могу его пропустить, поэтому #{@record}
ничего не возвращает на данный момент. Поскольку я не знаю Ruby, синтаксис для части @word.each
может быть неправильным.
Что такое вывод 'JSON.parse (IO.read ('localization.json'))'? – cobaltsoda
это именно файл JSON выше, поэтому значение @word будет массивом объектов JSON (скажем, значение «prev») –
Итак, JSON правильно проанализирован? Попробуйте запустить 'puts @ string' внутри метода и проверив, что это то, что вы ожидаете – cobaltsoda