icon 《基础 Ruby on Rails》的示例程序asagao与Rails2.2相适应

国际化(i18n)的第一步

上一章为止,asagao 的全部测试都通过了。


这一章开始,开始运用 Rails2.x 的新特征,对 asagao 进行改写。

首先从 Rails2.2 的中心, 国际化(il8n)入手吧。

到 Rails 2.1 为止,rails 自身都没有表示国际化标准的做法,因此各种各样的像GlobalizeRuby-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 文件,是分层数据。最上面的一层表示了语言的区别。语言是像 enja 这样,用2个字母表示。

下层中指定具体的关键字和翻译,也会被用来分类关键字。

这次的例子中,在 title 分类中配置关键字 news

语句 t('title.news') 用来获取对应 news 的翻译。

今天就到这吧。

(2008/12/26)