Module: Octopress::Multilingual

Extended by:
Multilingual
Included in:
Multilingual
Defined in:
lib/octopress-multilingual.rb,
lib/octopress-multilingual/hooks.rb,
lib/octopress-multilingual/command.rb,
lib/octopress-multilingual/filters.rb,
lib/octopress-multilingual/version.rb,
lib/octopress-multilingual/set_lang_tag.rb,
lib/octopress-multilingual/translation_tag.rb

Defined Under Namespace

Modules: Filters, Tags Classes: PagePayloadHook, SiteHook, Translate

Constant Summary collapse

VERSION =
"1.2.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#siteObject

Returns the value of attribute site.



15
16
17
# File 'lib/octopress-multilingual.rb', line 15

def site
  @site
end

Instance Method Details

#articles_by_language(lang = nil) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# 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) ⇒ Object



163
164
165
166
# File 'lib/octopress-multilingual.rb', line 163

def categories_by_language(lang=nil)
  @categories ||= (:categories)
  @categories[lang] || {}
end

#crosspostsObject



92
93
94
# File 'lib/octopress-multilingual.rb', line 92

def crossposts
  site.posts.select(&:crosspost_languages)
end

#lang_dictObject



33
34
35
36
37
38
39
40
41
# 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) ⇒ Object



29
30
31
# File 'lib/octopress-multilingual.rb', line 29

def language_name(name=nil)
  language_names[name] || name
end

#language_namesObject



43
44
45
46
47
48
49
50
51
# 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

#languagesObject



67
68
69
70
71
72
# 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) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# 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_languageObject



17
18
19
20
21
22
23
# File 'lib/octopress-multilingual.rb', line 17

def main_language
  @lang ||= begin
    if lang = site.config['lang']
      lang.downcase
    end
  end
end

#main_language_postsObject



96
97
98
99
100
# 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) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/octopress-multilingual.rb', line 142

def (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) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# 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) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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_langObject



102
103
104
# File 'lib/octopress-multilingual.rb', line 102

def posts_without_lang
  @posts_without_lang ||= site.reject(&:lang)
end

#site_payloadObject



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# 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) ⇒ Object



168
169
170
171
# File 'lib/octopress-multilingual.rb', line 168

def tags_by_language(lang=nil)
  @tags ||= (:tags)
  @tags[lang] || {}
end

#translated_pagesObject



60
61
62
63
64
65
# 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_postsObject



53
54
55
56
57
58
# 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