[ruby on rails]多国语言切换、使用i18n翻译、本地时区设置

一、多国语言切换
在 app/controllers/application_controller.rb 中加入:

before_action :set_locale

 def set_locale
   if params[:locale] && I18n.available_locales.include?( params[:locale].to_sym )
     session[:locale] = params[:locale]
   end

   I18n.locale = session[:locale] || I18n.default_locale
 end

在app/views/layouts/application.html.erb中添加:

<%= link_to "中文版", :controller => controller_name, :action => action_name, :locale => "zh-CN" %>
<%= link_to "English", :controller => controller_name, :action => action_name, :locale => "en" %>

二、使用i18n翻译
在application.rb中添加

class Application < Rails::Application
    config.i18n.default_locale = "zh-CN"
end

在config/locales下新建zh-CN.yml
在其中加入需要翻译的,如果是model翻译就在activerecord\attributes下添加Model名称和字段名称

zh-CN:
  hello: 亲~ %{name}你好:
  event_list: 活动列表
  admin:
    event_list: 活动列表管理
  activerecord:
    attributes:
      event:
        name: 名称
  event:
    status:
      draft: 草稿
      public: 公开
      private: 私密

在view中使用

<%= t( 'hello', name:current_user.name ) %> 
<%= t( 'admin.event_list' ) %> 
<%= t( event.status, scope:'event.status' )

还有一些常用的gem

gem “rails-i18n”
gem “devise-i18n”

其实,翻译档档名叫 events.yml、zh-TW.yml、en.yml 什么都无所谓,重要的是 YAML 结构中第一层要对应locale的名称,也就是 zh-CN,Rails 会加载 config/locales 下所有的YAML词汇档案。

三、本地时区设置
在application.rb中添加

class Application < Rails::Application
    config.time_zone = "Beijing"
end

这个是Time.now显示的时间设置为北京时间,数据库存的时间还是差8个小时,如果要把数据库时间也修改为本地则需要在application.rb中添加

config.active_record.default_timezone = :local

你可能感兴趣的:(ruby,on,rails)