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
#site ⇒ Object
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 ||= metadata_index_by_language(:categories)
@categories[lang] || {}
end
|
#crossposts ⇒ Object
92
93
94
|
# File 'lib/octopress-multilingual.rb', line 92
def crossposts
site.posts.select(&:crosspost_languages)
end
|
#lang_dict ⇒ Object
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_names ⇒ Object
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
|
#languages ⇒ Object
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_language ⇒ Object
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_posts ⇒ Object
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
|
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 metadata_index_by_language(index)
site_indexes = site.send(index)
indexes = {}
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)
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 ⇒ Object
102
103
104
|
# File 'lib/octopress-multilingual.rb', line 102
def posts_without_lang
@posts_without_lang ||= site.reject(&:lang)
end
|
#site_payload ⇒ Object
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
|
168
169
170
171
|
# File 'lib/octopress-multilingual.rb', line 168
def tags_by_language(lang=nil)
@tags ||= metadata_index_by_language(:tags)
@tags[lang] || {}
end
|
#translated_pages ⇒ Object
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_posts ⇒ Object
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
|