多语言顺利进行中
顺利的把语言信息通过 Gettext 提取了出去,完全的体力活,干得非常郁闷……
另外发现自己英文实在是太烂了,“文章数量” 翻译成 “Article number”…… 不过我相信大家的智商,应该能看懂我要表达什么。
嗯嗯,看上去还挺像样的~
麻烦的皮肤问题
Chito 的皮肤和一般的 Blog 皮肤一样,都包含了模板 ( 也就是 rhtml 文件) ,还有就是 CSS 和图像这些静态文件。
众所周知,Rails 的模板文件一般在 app/views 目录下,静态文件要放在 public 下,不过一个皮肤是一个整体,总不能让别人每次下载一个皮肤回来,就要把模板和静态文件拷贝到不同的位置。
Typo 的实现方法倒是比较有趣,模板和静态文件都放在 public 之外,找不到文件的请求会转向 ThemeController 上,然后再把请求的文件拷贝到 public 目录下,这样下次请求就会找到了。不过总觉得这样有点小题大作,与其这样,还不如建个 rake 任务,运行一下就自动把 theme 中的静态文件拷贝到 public 目录下,或者 rails 启动的时候,把静态文件一股脑拷过去。
还有一种方法就是干脆把模板文件也放在 public 目录下,缺点就是别人也能看到你的模板内容了,里面如果没有什么敏感信息的话倒是不算问题,但是就算现在没有,也不能保证以后没有,所以这种方法 pass ……
没想到这个问题这么麻烦。
准备用 Ruby-Gettext 国际化 Chito
也算是积攒经验吧,准备把 Chito 国际化。Rails 下的国际化方案有不少,复杂度和功能上都差别很大,可以参考这篇文章 InternationalizationComparison 里面对比了几个 Rails 的国际化方案,看下来还是决定用 Ruby-Gettext 。
Gettext 是个非常老牌和广泛使用的国际化、本地化实现,文档非常丰富,功能也非常强大,支持的 locales 也很多,po 文件还有专门的跨平台编辑器 poEdit,这样即使非编程人员,也可以用 poEdit 来轻松翻译程序中的文字信息。
Ruby-Gettext 的资料也不少,可以参考下面这两个:
Ruby-GetText-Package HOWTO for Ruby on Rails
Using Gettext To Translate Your Rails Application
中文的可以参考这篇在 IBM Developer Work 上的文章:
查看可能需要注册,如果你懒得注册,可以去看下面这个在 ruby-lang.org.cn 上转载的:
别看这些文章洋洋洒洒写了那么一大篇,其实用 Ruby-Gettext 国际化 Rails 网站很简单,如果你原来对 Gettext 有一些了解的话,会发现和国际化普通的程序没有什么两样~
现在只是比较担心插件的部分国际化,不知道能不能把语言信息和插件打包在一起,不过现在也不用考虑这么长远,到时候遇到问题再解决就是了~
Chito 小白鼠版
单机版的基本的工作差不多完成了,愿意当小白鼠的可以下这个测试版玩玩~
此版就是目前 Chito 目录的一个打包,所以包含所有的插件和皮肤,没有充分测试过各个部分和细节,所以不要拿这一版做实际应用~
放到了 Google Code 上:
http://chito.googlecode.com/files/chito-demo.tar.bz2
安装和其他 Rails 程序完全一样:
- 解压
- 建立数据库,开发数据库名称是 chito_dev
- 修改 database.yml 填上正确的数据库密码
- rake db:migrate
- ruby script/server
- 浏览器访问 http://127.0.0.1:3000
Ruby 中获取目录大小
查了查,Dir 类没有 size 方法,也没找到现成的解决方案,自己动手吧~
当前 Chito 中统计目录大小完全是偷懒的方式 :
-
class Dir
-
def self.size(dir)
-
`du -s #{dir} | awk '{print $1}'`.to_i
-
end
-
end
直接调用 du 这个程序然后把结果转换成数值就可以了,非常方便~ 不过要是运行在 Windows 下就不灵了,只好自己写代码统计下:
-
class Dir
-
def self.size(dir)
-
sum = 0
-
Dir.foreach(dir) do |entry|
-
next if entry =~ /^\./
-
path = File.join(dir, entry)
-
FileTest.directory?(path) ? sum += Dir.size(path) : sum += File.size(path)
-
end
-
sum
-
end
-
end
不过计算目录大小是个很慢的工作,尤其时文件夹嵌套很深,小文件又很多的时候,缓存一下是很必要的,当新文件上传或者删除设置个 dirty 标记,dirty 标记存在的时候再去重新获取。