存档

2009年1月 的存档

Rails 2.2 国际化(i18n) 简明指南

2009年1月21日

Rails 2.2出来有段时间了,前段时间需要个Wiki程序,于是试着将Instiki(Ruby on Rails官方网站的Wiki程序)移植到了2.2(http://github.com/yzhang/instiki_i18n/tree/master),同时加上了i18n支持,需要建Wiki的朋友可以试试,不过中间发现网上的指南都讲的不太全,所以我决定把看过的几个帖子整理下,合并出一个稍微完整的指南。

基本用法

基本用法想必大家都知道了,Rails默认的Locale文件夹在config/locales下,假设你要支持中文和英语,那么你需要在这个文件夹下放置en.yml和zh.yml。


# zh.yml
zh:
  submit: ‘提交’
 create: ‘创建’
#en.yml
en:
  submit: ‘Submit’
  create: ‘Create’

Rails 会自动加载config/locales目录下的locale文件,如果你的locale文件放在别的地方,那么你可以通过修改I18n.load_path来加载它:


# in config/initializer/locale.rb
I18n.load_path += Dir[ File.join(RAILS_ROOT, 'lib', 'locale', '*.{rb,yml}') ]

使用很简单,你可以进入Console进行测试:


> I18n.t ’submit’
=>
“Submit”
> I18n.locale =
‘zh’
=>
“zh”
> I18n.t(’submit’
)
=>
“提交”

试图中更加简单,你可以直接调用t方法:


<%= t ’submit’ %>

传递变量

有些时候,我们的字符串中可能需要包含变量,只需要将其放在两个大括号内就可以了:

# zh.yml


zh:
  hello:
“你好, {{name}}”

打开console:


> I18n.t ‘hello’, :name => ‘Rails’
=>
“你好,Rails!”

单复数处理

实际上,中文不存在这个问题,这个问题主要存在于字母语言,解决方法是:


# en.yml
en:
  post:
    one: ‘1 post’
    other: ‘{{count}} posts’

然后在console中测试:


> I18n.t ‘post’, :count => 1
=>
“1 post”
> I18n.t ‘post’, :count
=> 5
=>
“5 posts”

时间和日期

时间和日期的翻译稍微复杂,需要用到rails-i18n项目下rails/locale文件夹下的zh-CN.yml文件,由于文件太大,就不贴出来了,有了这个文件,现在你就可以:


> I18n.l Date.today, :format => ‘long’
=> “2009年1月08日”
> I18n.l Time.now, :format => ‘default’
=> “2009年1月08日 星期四 20:37:58 CST”
> I18n.time_ago_in_words(Time.now)
=> “一分钟内”
> I18n.time_ago_in_words(48.minutes.ago)
=> “大约一小时”

数字

假设你已经有了上面的那个文件:


> number_to_currency(100)
=> “$100.00″
> I18n.locale = ‘zh’
=> “zh”
> number_to_currency(100)
=> “CNY 100.00″

你只需要将CNY换成人民币的符号就可以了。

ActiveRecord

ActiveRecord也很简单,假设你有一个user model,它有两个属性login和email,那么需要在zh.yml中定义:


zh:
  activerecord:
    models:
      user: “用户”
    attributes:
      user:
        login: “用户名”
        email: “电邮”

这样就OK了:


> u = User.create
false
> u.errors.full_messages
['用户名不能为空字符', '电邮不能为空字符']

根据请求设定语言

要设置应用的默认语言,可以通过

config.i18n.default_locale = :zh

如果要根据用户浏览器的设置选择语言,需要在application.rb中加一个before_filter:


class ApplicationController
  before_fiter :set_language
  def set_language
    request_language = request.env['HTTP_ACCEPT_LANGUAGE']
    request_language = request_language.nil? ? nil : request_language[/[^,;]+/]
    I18n.locale = request_language if request_language && File.exist?(”#{RAILS_ROOT}/config/locales/#{request_language}.yml”)
  end
end

参考:

转载于:LetRails

rubychina RoR , ,

github每月热门-09年1月

2009年1月21日

github

  • github上09年1月的热门项目!过去的一年github无疑是非常受欢迎,聚集了很多的ruby和rails开发者。RubyInside今天又发布了本月的13个热门项目

本月热榜:

新闻来源:RubyInside

rubychina News

在Debian(包含Ubuntu)平台使用APT方式安装Ruby和Rails

2009年1月21日

a291d14d7698f3977a2931f71f574003Passenger 公司负责人Phusion,前两天对外公布了DebGem(RubyGem to APT conversion service)以后Debian和Ubuntu的系统管理员和用户可以使用APT方式来安装和维护ruby和rails系统环境了。
安装ruby:

 apt-get install libhpricot-ruby

安装rails:

 apt-get install rails

来源:RubyInside

rubychina News

bdb:改进Berkeley DB的Ruby Bindings

2009年1月21日

berkdb.png Berkeley DB 是一个高性能的数据库系统,它在20世纪90年代初开始开发,他不是SQL数据库引擎驱动,而是用于存储键/值对数据 。BDB非常快,可在大多数的操作系统上使用, 并且是双许可开源和允许商业用途.对于初次使用者来说,它有几个优点:仅使用一个单位文件,PStore(受保护存储): 事务, 细纹锁, 可复制和支持热备份。

        虽然已经存在关于BDB的Ruby Bindings,但是Matt Bauer发布的Ruby  Bindings加入了一些新的特性且能够快速容易的使用。当然,刚开始之前,你需要在你的操作系统中安装Berkeley DB Library. OS X,MacPort中Berkeley BD 4.6 被称为db46,Ubuntu中为libdb-dev。另外,可以到Berkeley DB 的官方网站下载源代码,还有Matt的关于安装和使用Ruby Bindings 的说明文件.

使用范例:

env = Bdb::Env.new(0)
env_flags =  Bdb::DB_CREATE |    # Create the environment if it does not already exist.
             Bdb::DB_INIT_TXN  | # Initialize transactions
             Bdb::DB_INIT_LOCK | # Initialize locking.
             Bdb::DB_INIT_LOG  | # Initialize logging
             Bdb::DB_INIT_MPOOL  # Initialize the in-memory cache.
env.open(File.join(File.dirname(__FILE__), 'tmp'), env_flags, 0);

db = env.db
db.open(nil, ‘db1.db’, nil, Bdb::Db::BTREE, Bdb::DB_CREATE | Bdb::DB_AUTO_COMMIT, 0)   

txn = env.txn_begin(nil, 0)
db.put(txn, ‘key’, ‘value’, 0)
txn.commit(0)

p db.get(nil, ‘key’, nil, 0)

db.close(0)
env.close

       好了,这不是最容易阅读的代码,但是Berkeley BD的功能远远大于它复杂的API。如果你对Berkeley DB 及其方式仍然感到新鲜,请查阅指南(略有些旧但不过时)来加快理解。

原文:http://www.rubyinside.com/bdb-improved-ruby-bindings-for-berkeley-db-1438.html

rubychina Ruby ,