1. 什么是internationalization(i18n)?

国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程。当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正。

当然,官方的定义总是十分高大上。实际上,今天我们要做的并没有那么复杂。任务是为上次的系列3里的Web站点提供多语言支持。比如上次是英语网站,这次我们可以根据用户地点自动提供中文网站或其他语言网站。

2.如何实现i18n?

2.1 Step1: 登录Cloud9,进入上次的开发环境

cd firstDemo

2.2 Step2:准备多语言字典(locale material)

进入该网站:https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale

该网站提供了各种语言的locale模版,这里我们需要以下2个文件(当然如果你需要支持其他国家语言,还需要准备其他文件):

[1]en.yml  (英语版本)

[2]zh-CN.yml  (简体中文版本)

2.3 Step3:编辑config/locales文件夹(1)

如上图,在该文件夹下我们看到只有一个文件:en.yml,将其打开发现只有2行代码如下:

en:
hello: "Hello world"

这是一个yml文件模版,现在我们需要讲其换成上面的en.yml

点击进入:en.yml 打开文件,然后复制粘贴网页内容,将原来的en.yml文件内容覆盖

[注意点:正确的复制方法与错误的复制方法]

YML文件是通过key-value格式定义数据的文件,它是Ruby on Rails里的数据定义文件,特点是空格敏感!错误的复制方法会忽略空格进而导致语法错误。因此这里的操作非常重要。

[正确的复制方法]

如上图,点击红色区域的按钮,进入新的页面,然后再进行复制,即可保留空格。如果直接在该页面复制,会忽略空格导致语法错误!

2.4 Step3:编辑config/locales文件夹(2)

en.yml搞定以后,在config/locales文件夹下新建文件:zh.yml,再将zh-CN.yml下的内容同样复制过去

注意,zh.yml文件第一行应将zh-CN改成zh(去掉-CN)

接下来:我们需要对以上2个文件(en.yml和zh.yml)进行编辑,以适应我们的Web应用。

对于en.yml,我们需要在en:下一行,date:上一行区域输入以下代码(注意空格):

en:
memo_title: My Memopad
show: Show
edit: Edit
destroy: Destroy
list_memo: Listing memos
new_memo: New Memo
date:

对于zh.yml,插入如下代码:

zh:
memo_title: 我的记录
show: 展示
edit: 编辑
destroy: 删除
list_memo: 列表
new_memo: 新建
date:

2.5 Step4:修改views页面文件

[1]app/views/memos/index.html.erb文件第17~19行

将该3行代码改为如下代码:

<td><%= link_to (t 'show'), memo %></td>
<td><%= link_to (t 'edit'), edit_memo_path(memo) %></td>
<td><%= link_to (t 'destroy'), memo, method: :delete, data: { confirm: 'Are you sure?' } %></td>

<% (ruby表达式) %> 该符号表明可在标记中间插入ruby语句

<% =(ruby输出) %> 该符号可将ruby表达式的值转换成html输出结果

(t 'xxxx') t代表翻译函数,是translate的简写形式。该函数将输出引号所对应的值(参考前面的yml文件键值对理解)

[2]app/views/layouts/application.html.erb文件第4行

将改行改为下列代码:

<title><%= t 'memo_title' %></title>

[3]app/views/memos/index.html.erb文件第3行

将改行改为下列代码:

<h1><%=t 'memo_title' %></h1>

[4]app/views/memos/index.html.erb文件第27行

将改行改为下列代码:

<%= link_to (t 'new_memo'), new_memo_path %>

2.6 修改config/application.rb文件

取消第20行,第21行注释;并将'my'改为'config',将:de改为:zh,并添加一行代码config.encoding = 'utf-8',代码如下:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :zh config.encoding = 'utf-8'

这样,页面的默认显示语言就变为中文。

2.7 修改app/controllers/application_controller.rb文件

将文件代码改为以下代码:

class ApplicationController < ActionController::Base
protect_from_forgery before_filter :set_locale def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end

至此,i18n配置完毕,现在已经实现了中英双语支持!

3 测试网页

3.1 启动服务器

$ rails server -b $IP -p $PORT 

3.2 测试默认网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos,注意默认网页会自动转为中文页

3.3 测试英文网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos?locale=en

3.4 测试中文网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos?locale=zh

测试成功,至此本次国际化专题也就告一段落。敬请期待[Ruby on Rails系列]5(待定)

[Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]的更多相关文章

  1. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  2. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

    本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...

  3. [Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置

    前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环 ...

  4. Rails应用系列(1):初识Rails

    第一个Rails应用 Rails是一个"模型-视图-控制器"框架(MVC).是用Ruby写的,所以要对Ruby要有一定的了解才能对rails框架深入学习.其实Ruby与Rails就 ...

  5. [Ruby on Rails系列]5、专题:Talk About SaSS

    This is my presentation in the Rails lecture of Hosei University. I will introduce SaSS by 5 example ...

  6. [Ruby on Rails系列]1、开发环境准备:Vmware和Linux的安装

    Ruby on Rails是一个采用Ruby语言的遵循MVC模式的Web开发框架.使用RoR会得到更加快速爽快的Web开发体验.相比于Java EE,该框架使Web开发的速度和效率变得更加轻快和敏捷. ...

  7. [ 翻译]ruby rails相关的常见服务器

    原文:http://stackoverflow.com/questions/4113299/ruby-on-rails-server-options     一,Apache vs Nginx     ...

  8. [Rails学习之路]Rails文件结构与路由

    约定优于配置和RESTful是Ruby on Rails十分推崇的哲学.在一个默认的RESTful的Rails项目中,使用资源和HTTP动词来帮助组织项目. 假如有一个使用scaffold创建的Rai ...

  9. [Rails学习之路]Rails路由配置

    如果是使用Rails的默认约定,那么几乎是零配置. 但有些时候,我们可能不得不(或者更喜欢)进行一些特殊的配置. 其实Rails在路由功能中也有很丰富的配置选项. routes.rb文件中靠前的规则优 ...

随机推荐

  1. 实现网页页面跳转的几种方法(meta标签、js实现、php实现)

    1.meta标签实现 只需在head里加上下面这一句就行了,在当前页面停留0.1秒后跳转到目标页面  代码如下 复制代码 1 <meta http-equiv="refresh&quo ...

  2. java小经验

    从事互联网金融,常常会碰到文件处理,以前都是傻傻的解析,这次我不想这么傻了,做个小小的封装,咱也以oop的思想来完成. 文件解析处理一般分两种模式:分隔符与定长,目前工作五年也就这两种. 封装思想: ...

  3. 09_rlCoachKin讲解

    在Socket.cpp中Socket::readClient()函数中就是解析读取到的内容的. 对于我们发送的2 0 1.57 0.31 0 0 1.57 0,那么就会进入如下分支: 也就是进入2号处 ...

  4. L004-oldboy-mysql-dba-lesson04

        L004-oldboy-mysql-dba-lesson04 [root@web01 mysql]# mysql -uroot -ptestpassword -S /tmp/mysql.soc ...

  5. 关于linux下零散的东西 --慢慢补充

    一.截图     ,使用Shift+Ctrl+PrtSc就可以截图. 二.tar命令参数 c:表示压缩 x:表示解压 z:表示gzip的方式解/压缩 j:表示bzip2的方式解/压缩 三.串口终端ke ...

  6. php删除html标签的三种解决方法

    分享下PHP删除HTMl标签的三种方法. 方法1:直接取出想要取出的标记 <?php //取出br标记 function strip($str) { $str=str_replace(" ...

  7. 如何快速建立Subversion服务器

    本文拷贝自网址:http://www.subversion.org.cn/?action-viewnews-itemid-1 如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关 ...

  8. Web服务器集群搭建关键步骤纪要

    前言:本文记述了搭建一个小型web服务器集群的过程,由于篇幅所限,系统.软件的安装和基本配置我这里就省略了,只记叙关键配置和脚本内容.假如各位朋友想了解各软件详细配置建议查阅官方文档. 一 需求分析: ...

  9. IPHONE开发知识

    IPHONE开发知识http://www.cnblogs.com/valensoft/archive/2010/06/09/1754836.htmlhttp://www.cocoachina.com/ ...

  10. C#微信登录-手机网站APP应用

    要求:公众号必须先认证,认证费用¥300/年,比较黑 一.微信登录核心代码 //核心代码,没判断异常 1.登录页面 protected void Page_Load(object sender, Ev ...