解决Octopress分类目录支持中文的问题

几个月前,装了一次Octopress,可是在进行到 bundle install 的时候老是出现问题,后来放弃了。
拖了这么久,又装了一次,这一次出奇的顺利,所有基础件都搞定了的时候开始摸索各种组件。
在弄到分类问题的时候,问题来了,不能支持中文。
因为生成的 /_deploy/blog/categories/ 下的所有有关分类的目录名全是英文,
如杂记分类会生成 /_deploy/blog/categories/za-ji/ 这样的目录,所以地址导向的时候,找不到相关的页面。
网上的办法找了很多,很多在本地预览的时候没有问题,但是推到github上之后还是出现“404页面不存在”的情况,苦思冥想,总算是找到了解决办法。

参考文章:
Octopress博客分类添加中文支持
讓Octopress有中文分類及側邊列
Octopress易筋经,中文分类标签

但是他们给出的解决办法可能因为版本的原因,都不太适用了。所以在这基础上做了一些修改。
首先把以下內容存到 plugins/category_sidebar.rb (若没有,自行创建)

category_sidebar.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require 'stringex'

module Jekyll
class CategoryListTag < Liquid::Tag
def render(context)
html = ""
categories = context.registers[:site].categories.keys
categories.sort.each do |category|
posts_in_category = context.registers[:site].categories[category].size
html << "<li class='category'><a href='/blog/categories/#{category.to_url.downcase}/'>#{category} (#{posts_in_category})</a></li>\n"
end
html
end
end
end

Liquid::Template.register_tag('category_sidebar', Jekyll::CategoryListTag)

接下來把以下内容存到 source/_includes/asides/category_sidebar.html。 (若没有,自行创建)

category_sidebar.html
1
2
3
4
5
6
<section>
<h1>Categories</h1>
<ul id="categories">
\{\% category_sidebar \%\}
</ul>
</section>

最后修改_config.yml,增加分类内容asides/category_sidebar.htmldefault_asides
default_asides: [asides/category_sidebar.html, asides/recent_posts.html]

这样就成了。