1. 新建项目并进入目录
#在没有修改bundle的sources默认地址时
#新建项目时进行bundle会很慢,可以先直接跳过bundle
rails new blog --skip-bundle
cd blog
#设置bundle默认的sources
#(注:只要设置一次,以后再建项目时,就可以直接bundle了)
bundle config mirror.https://rubygems.org http://gems.ruby-china.org
#bundle
bundle update
bundle install
2.创建一个简单的页面
#生成article模块
rails g scaffold Article name:string title:string content:text
#数据库迁移
rake db:migrate
3.启动
#使用默认方式启动,在浏览器中访问http://localhost:3000/articles
rails server
4.准备本地化文件
下载地址:zh-CN.yml
放到blog/config/locales目录下
5.修改application.rb
文件在blog目录下
module Blog
class Application < Rails::Application
+ config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
+ config.i18n.default_locale = :'zh-CN'
+ config.encoding = 'utf-8'
end
end
6.修改application_controller.rb
文件在blog/app/controllers目录下
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
+ before_action :set_locale
+ def set_locale
+ I18n.locale = params[:locale] || I18n.default_locale
+ end
end
7.修改zh-CN.yml,添加models相关翻译
我们可以把models理解为app下的models目录(实际就是与他对应的,同时也是与数据库的表对应)
---
zh-CN:
activerecord:
// models为模块名
+ models: #关键字,下面是对应的模块名
+ article: 文章
+ attributes: #关键字,下面是对应的表名
+ article: #表名单数格式,下面是对应的字段
+ name: 名称
+ title: 标题
+ content: 内容
errors:
messages:
record_invalid: "验证失败: %{errors}"
restrict_dependent_destroy:
has_one: 由于 %{record} 需要此记录,所以无法移除记录
has_many: 由于 %{record} 需要此记录,所以无法移除记录
...
这时我们可以在添加、修改页面看到成果。
8.进一步本地化
我们可以看到index页面还没有被本地化
继续添加本地化文件zh-CN.yml
---
zh-CN:
+ Blog: 博客
+ Name: 名称
+ Title: 标题
+ Content: 内容
+ Show: 显示
+ Edit: 修改
+ Destroy: 删除
+ Articles: 文章
+ New Article: 添加文章
+ Editing Article: 修改文章
+ Are you sure?: 你确定?
+ Edit: 修改
+ Back: 返回
activerecord:
models:
article: 文章
attributes:
article:
name: 名称
title: 标题
content: 内容
修改views/articles下的erb文件
<p id="notice"><%= notice %></p>
-<h1>Articles</h1>
+<h1><%= t 'Articles'%></h1>
<table>
<thead>
<tr>
- <th>Name</th>
+ <th><%= t 'Name'%></th>
- <th>Title</th>
+ <th><%= t 'Title'%></th>
- <th>Content</th>
+ <th><%= t 'Content'%></th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @articles.each do |article| %>
<tr>
<td><%= article.name %></td>
<td><%= article.title %></td>
<td><%= article.content %></td>
- <td><%= link_to 'Show', article %></td>
+ <td><%= link_to (t 'Show'), article %></td>
- <td><%= link_to 'Edit', edit_article_path(article) %></td>
+ <td><%= link_to (t 'Edit'), edit_article_path(article) %></td>
- <td><%= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?'} %></td>
+ <td><%= link_to (t 'Destroy'), article, method: :delete, data: { confirm: (t 'Are you sure?') } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
-<%= link_to 'New Article', new_article_path %>
+<%= link_to (t 'New Article'), new_article_path %>
其它的erb文件做相应的修改即可,修改后的效果如下:
备注:
1.对views这块没有发现更好的解决方案,感觉这样做很呆,不如索性直接改成中文
2.做了本化之后,如果还要显示英文,可以在请求后面加locale参数,例如:http://localhost:3000/articles/2/edit?locale=en,显示的就是en状态
3.如果你有更好的方案,请告诉我,我会再更新