2015-01-12 3 views
0
내가 날짜를 지역화하는 국제화의 보석 및 플러그인을 설치하지만,

나는 다음과 같은 오류를 얻을 사이트를 제공하는 경우 :지킬 국제화 오류

footer.html를에서
Malahovas-MacBook-Pro:test Svetlana$ rake 
Configuration file: /Users/Svetlana/Desktop/test/_config.yml 
      Source: /Users/Svetlana/Desktop/test 
     Destination: /Users/Svetlana/Desktop/test/_site 
     Generating... 
    Liquid Exception: Object must be a Date, DateTime or Time object. "2015-12-01" given. in _includes/footer.html, included in _layouts/post.html 
jekyll 2.5.3 | Error: Object must be a Date, DateTime or Time object. "2015-12-01" given. 

나는 다음과 같은 코드가 있습니다

<time datetime="{{ page.date | date: "%Y-%m-%d" }}"> 
    {{ page.date | localize: "%d %B %Y" }} 
</time> 

require 'i18n' 

LOCALE = :ru # set your locale 

# Create folder "_locales" and put some locale file from 
# https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale 
module Jekyll 
    module I18nFilter 
    # Example: 
    # {{ post.date | localize: "%d.%m.%Y" }} 
    # {{ post.date | localize: ":short" }} 
    def localize(input, format=nil) 
     load_translations 
     format = (format =~ /^:(\w+)/) ? $1.to_sym : format 
     I18n.l input, :format => format 
    end 

    def load_translations 
     unless I18n::backend.instance_variable_get(:@translations) 
     I18n.backend.load_translations Dir[File.join(File.dirname(__FILE__), '../_locales/*.yml')] 
     I18n.locale = LOCALE 
     end 
    end 
    end 
end 

그것은 수집 문서입니다 :

여기에 플러그인 i18n_filter.rb 코드입니다. --trace 빌드 실행 한 후 내가 얻을 :

Malahovas-MacBook-Pro:test Svetlana$ jekyll build --trace 
Configuration file: /Users/Svetlana/Desktop/test/_config.yml 
      Source: /Users/Svetlana/Desktop/test 
     Destination: /Users/Svetlana/Desktop/test/_site 
     Generating... 
    Liquid Exception: Object must be a Date, DateTime or Time object. "2015-12-01" given. in _includes/footer.html, included in _layouts/post.html 
/Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb:124:in `rescue in render': Object must be a Date, DateTime or Time object. "2015-12-01" given. (Jekyll::Tags::IncludeTagError) 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/tags/include.rb:116:in `render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/block.rb:109:in `block in render_all' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/block.rb:96:in `each' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/block.rb:96:in `render_all' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/block.rb:82:in `render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/template.rb:128:in `render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/liquid-2.6.1/lib/liquid/template.rb:138:in `render!' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/renderer.rb:92:in `render_liquid' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/renderer.rb:134:in `place_in_layouts' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/renderer.rb:56:in `run' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:292:in `block (2 levels) in render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:291:in `each' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:291:in `block in render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:290:in `each' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:290:in `render' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/site.rb:51:in `process' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/command.rb:28:in `process_site' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb:56:in `build' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb:34:in `process' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/lib/jekyll/commands/build.rb:18:in `block (2 levels) in init_with_program' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary/command.rb:220:in `call' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary/command.rb:220:in `block in execute' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary/command.rb:220:in `each' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary/command.rb:220:in `execute' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary/program.rb:35:in `go' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/mercenary-0.3.3/lib/mercenary.rb:22:in `program' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/gems/jekyll-2.5.3/bin/jekyll:20:in `<top (required)>' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/bin/jekyll:23:in `load' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/bin/jekyll:23:in `<main>' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `eval' 
    from /Users/Svetlana/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `<main>' 

는이 고정 할 수있는 방법을 알고 계십니까?

+0

일부 코드 + 플러그인을 사용하면 도움이됩니다. –

+0

'trace '@DavidJacquel로 빌드 한 후 플러그인 코드와 오류 메시지로 질문을 업데이트했습니다. @DavidJacquel – jupiteror

+0

'2014-01-01 09 : 49 : 00'과 같은 것을 전달하려고 했습니까? –

답변

1

I18n.localize 또는 I18n.l에는 Date, DateTime 또는 Time 인수가 필요합니다. page.date은 실제로 DateTime 또는 Time이어야합니다. 그러나 필터가로드되지 않아 Jekyll에서 무시한다고 가정합니다 (하단에 액체 필터로드를 추가했습니다). 당신이 ./locales/라는 이름의 폴더에서 프로젝트 디렉토리에 로케일 파일 ru.yml이 가정

: I18n.localize에 대한 호출하기 전에 입력 문자열을 구문 분석하는

시도 : 여기에 하나의 가능한 수정합니다. input 조작 된 문자열, 예를 들어, 경우 i18n.rbDateTime에 변환 오류가 발생할 수 있습니다

ru: 
    hello: приве́т 

로케일을, 예컨대 : 포함, 유효한 YAML 파일을 할 수있다 ./_plugins/i18n.rb

require 'date' 
require 'i18n' 

path = File.expand_path("../../locales/ru.yml", __FILE__) 
I18n.load_path = Dir[path] 
I18n.locale = :ru 

module Jekyll 
    module I18nFilter 
    # Example: 
    # {{ post.date | localize: "%d.%m.%Y" }} 
    # {{ post.date | localize: ":short" }} 
    def localize(input, format=nil) 
     format = (format =~ /^:(\w+)/) ? $1.to_sym : format 

     if input.is_a?(String) 
     input = DateTime.parse(input) 
     end 

     I18n.l input, :format => format 
    end 

    def translate(key) 
     I18n.t key 
    end 
    end 
end 

# Add as a filter 
Liquid::Template.register_filter(Jekyll::I18nFilter) 

ru.yml에 위치 빈 ""또는 날짜에 필요한 항목이 누락되었습니다. 최소값은 "2015-01-13"과 같습니다.

지킬에 대한 대안으로 : Nanoc을 확인하십시오. 최신 정보이며 더 쉽게 확장 할 수 있습니다. 그것은 Github에서 사용되며 우리의 모든 정적 페이지에 사용합니다. localization platform PhraseApp

+0

고맙습니다. 이제는 서버를 실행하는 데 오류가 발생하지 않지만 현지화는 작동하지 않습니다. 나는 "2015-01-13"과 같은 문자열만을 얻습니다. – jupiteror

+0

필터를 플러그인으로 추가 했습니까? 문서 : http://jekyllrb.com/docs/plugins/ 액체 필터 아래에 설명 된대로 Liquid :: Template.register_filter (Jekyll :: I18nFilter)을 사용하십시오. – fredostarr

+0

필터로 추가하고 페이지를 재생성하면 저에게 효과적입니다. With 2.4.0 – fredostarr