module Octopress::Multilingual

Constants

VERSION

Attributes

site[RW]

Public Instance Methods

articles_by_language(lang=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 106
def articles_by_language(lang=nil)
  @articles_by_language ||= begin
    articles = {}

    languages.each do |lang|
      if posts = posts_by_language(lang)
        articles[lang] = posts.reject do |p|
          p.data['linkpost']
        end
      end
    end

    articles
  end

  @articles_by_language[lang] || []
end
categories_by_language(lang=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 163
def categories_by_language(lang=nil)
  @categories ||= metadata_index_by_language(:categories)
  @categories[lang] || {}
end
crossposts() click to toggle source
# File lib/octopress-multilingual.rb, line 92
def crossposts
  site.posts.select(&:crosspost_languages)
end
lang_dict() click to toggle source
# File lib/octopress-multilingual.rb, line 33
def lang_dict
  @lang_dict ||= begin
    data = {}
    site.languages.each do |lang|
      data[lang] = site.data["lang_#{lang}"]
    end
    data
  end
end
language_name(name=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 29
def language_name(name=nil)
  language_names[name] || name
end
language_names() click to toggle source
# File lib/octopress-multilingual.rb, line 43
def language_names
  @language_names ||= begin
    config = SafeYAML.load_file(File.expand_path('../../language_key.yml', __FILE__))
    if lang_config = site.config['language_names']
      config.merge!(lang_config)
    end
    config
  end
end
languages() click to toggle source
# File lib/octopress-multilingual.rb, line 67
def languages
  @languages ||= begin
    languages = site.posts.dup.concat(site.pages).select(&:lang).group_by(&:lang).keys
    (languages.unshift(main_language)).uniq
  end
end
linkposts_by_language(lang=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 124
def linkposts_by_language(lang=nil)
  @linkposts_by_language ||= begin
    linkposts = {}

    languages.each do |lang|
      if posts = posts_by_language(lang)
        linkposts[lang] = posts.select do |p|
          p.data['linkpost']
        end
      end
    end

    linkposts
  end

  @linkposts_by_language[lang] || []
end
main_language() click to toggle source
# File lib/octopress-multilingual.rb, line 17
def main_language
  @lang ||= begin
    if lang = site.config['lang']
      lang.downcase
    end
  end
end
main_language_posts() click to toggle source
# File lib/octopress-multilingual.rb, line 96
def main_language_posts
  site.posts.reverse.select do |post|
    post.lang.nil? || post.lang == main_language
  end
end
metadata_index_by_language(index) click to toggle source
# File lib/octopress-multilingual.rb, line 142
def metadata_index_by_language(index)
  # Get site categories or tags
  site_indexes = site.send(index)

  indexes = {}

  # Filter indexes for each language
  languages.each do |lang|
    indexes[lang] = {}
    site_indexes.each do |index, posts|
      posts = posts.select do |p| 
        p.lang == lang || (lang == main_language && p.lang.nil?) || p.crosspost_languages
      end

      indexes[lang][index] = posts unless posts.empty?
    end
  end

  indexes
end
page_payload(lang) click to toggle source
# File lib/octopress-multilingual.rb, line 173
def page_payload(lang)
  payload = {
    'site' => { 
      'posts'      => posts_by_language(lang),
      'linkposts'  => linkposts_by_language(lang),
      'articles'   => articles_by_language(lang),
      'categories' => categories_by_language(lang),
      'tags'       => tags_by_language(lang)
    },
    'lang' => lang_dict[lang]
  }

  if defined?(Octopress::Ink) && site.config['lang']
    payload.merge!(Octopress::Ink.payload(lang))
  end

  payload
end
posts_by_language(lang=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 74
def posts_by_language(lang=nil)
  @posts_by_language ||= begin
    posts = site.posts.reverse.select(&:lang).group_by(&:lang)
    ## Add posts that crosspost to all languages
    
    posts.each do |lang, lang_posts|
      if lang != main_language
        lang_posts.concat(crossposts).sort_by!(&:date).reverse!
      end
    end

    posts[main_language] = main_language_posts
    posts
  end

  @posts_by_language[lang] || []
end
posts_without_lang() click to toggle source
# File lib/octopress-multilingual.rb, line 102
def posts_without_lang
  @posts_without_lang ||= site.reject(&:lang)
end
site_payload() click to toggle source
# File lib/octopress-multilingual.rb, line 192
def site_payload
  if main_language
    @payload ||= {
      'site' => {
        'posts_by_language'      => posts_by_language,
        'linkposts_by_language'  => linkposts_by_language,
        'articles_by_language'   => articles_by_language,
        'categories_by_language' => categories_by_language,
        'tags_by_language'       => tags_by_language,
        'languages'              => languages
      },
      'lang' => lang_dict[main_language]
    }
  else
    {}
  end
end
tags_by_language(lang=nil) click to toggle source
# File lib/octopress-multilingual.rb, line 168
def tags_by_language(lang=nil)
  @tags ||= metadata_index_by_language(:tags)
  @tags[lang] || {}
end
translated_pages() click to toggle source
# File lib/octopress-multilingual.rb, line 60
def translated_pages
  @translated_pages ||= begin
    filter = lambda {|p| p.data['translation_id']}
    site.pages.select(&filter).group_by(&filter)
  end
end
translated_posts() click to toggle source
# File lib/octopress-multilingual.rb, line 53
def translated_posts
  @translated_posts ||= begin
    filter = lambda {|p| p.data['translation_id']}
    site.posts.reverse.select(&filter).group_by(&filter)
  end
end