0
私は、2つの変数(テキストと言語)を取り、テキストを提供された言語オプションに変換するカスタムJekyllタグを作成しています。例えばネストしたJSON要素をループしてカスタムJekyllタグの値を見つけよう
、{% localize next de %}
は "Weiter" を返す必要があり、このlocalization.jsonファイル与えられた:
{
"prev": [{
"en": "Prev"
}, {
"de": "Zurück"
}, {
"ko": "이전"
}],
"next": [{
"en": "Next"
}, {
"de": "Weiter"
}, {
"ko": "다음"
}]
}
プラグインコードRubyである:@word
まで
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)
、それは結構ですが、私はそのネストされた配列を持っているときはいつでもループすることはできませんので、#{@record}
は現時点では何も返しません。 Rubyの知識がないので、@word.each
の構文が正しくない可能性があります。
'JSON.parse(IO.read( 'localization.json'))'の出力は何ですか? – cobaltsoda
それはまさに上記のJSONファイルなので、@wordの値はJSONオブジェクトの配列になります( "prev"の値など) –
JSONは正しく解析されていますか?メソッドの中に 'puts @ string'を実行して、それがあなたが期待しているものであることを確認してください。 – cobaltsoda