《基础 Ruby on Rails》的示例程序asagao与Rails2.2相适应
国际化(i18n)的第一步
到上一章为止,asagao 的全部测试都通过了。
这一章开始,开始运用 Rails2.x 的新特征,对 asagao 进行改写。
首先从 Rails2.2 的中心, 国际化(il8n)入手吧。
到 Rails 2.1 为止,rails 自身都没有表示国际化标准的做法,因此各种各样的像Globalize 和Ruby-GetText-Package 等的方法被提了出来。
i18n的基本内容如下。
- 创建
config/locales文件夹,在它下面将关键字和翻译以 YAML 的形式存起来。 - 控制台和视窗中,通过给
t方法赋予关键字,获得翻译。
那赶快试试吧。
打开app/views/main/news.rhtml 。第一行是像下面这样的吧。
<% @page_title = '新闻' -%>
将此做如下修改。
<% @page_title = t('title.news') -%>
用浏览器打开 /main/news ,下列字符串将会作为页面标题显示出来。
<span class="translation_missing">en, title, news</span>
这是没有属于title 分类的关键字 news 的英语(en) 翻译的意思。
因此,在 config/locales 文件夹中创建一个叫 titles_en.yml 的空文件,写入以下内容。
en:
title:
news: News
重新启动服务器,在浏览器中刷新页面,标题会显示“News”。
接下来,在config/locales 文件夹中创建 titles_ja.yml ,写入如下内容。
ja:
title:
news: 新闻
然后,打开 config/environment.rb ,在Rails::Initializer.run do |config| 和end 间添加下面这行。
config.i18n.default_locale = :ja
重启服务器,刷新页面,标题会显示“新闻”。
怎么样?虽然没有说明根本的原理,但是用法应该了解了吧。
定义翻译的 YAML 文件,是分层数据。最上面的一层表示了语言的区别。语言是像 en 和 ja 这样,用2个字母表示。
下层中指定具体的关键字和翻译,也会被用来分类关键字。
这次的例子中,在 title 分类中配置关键字 news 。
语句 t('title.news') 用来获取对应 news 的翻译。
今天就到这吧。
(2008/12/26)
- 前言
- 功能测试开头部分的修改等 (2008/12/01)
- rake rails:update (2008/12/15)
- Cookie Store (2008/12/16)
- 分页 (2008/12/17)
- blog_entries 控制台的修改 (2008/12/20)
- 单例资源 (2008/12/21)
- 一口气通过所有功能测试 (2008/12/21)
- 综合测试和rak (2008/12/22)
- 国际化(i18n)的第一步 (2008/12/26)
- 基于Cookie的区域的切换 (2009/01/04)
- ActiveRecord 模型的字段名的国际化 (2009/01/08)
- 错误信息的国际化(1) (2009/01/09)
- 错误信息的国际化(2) (2009/01/10)
- 错误信息的国际化(3) (2009/01/17)
- 错误信息的国际化(4) (2009/01/24)

