I18n实现中英文切换

Rails I18n API框架提供了 Rails 应用国际化/本地化所需的全部必要支持,可以很容易的实现网站语言的切换。

配置I18n模块

Rails 会把 config/locales 文件夹中的 .rb 和 .yml 文件自动添加到翻译文件加载路径中,默认的翻译文件是config/locales/en.yml,假如我们需要使用自定义的翻译文件config/locales/zh.yml作为默认翻译,只需要在config/application.rb中添加以下配置:

config.i18n.default_locale = :zh

代码实现

默认语言为中文,假设我们在首页有个链接,默认为的text为EN,点击后变成中文,在app/views/welcome/home.html.erb中写入一行:

<li><%= link_to_locale(request.path) %>li>
# app/helpers/welcome_helper.rb
module WelcomeHelper

  def link_to_locale(path)
    text = I18n.t(:language) == "EN" ? "中文" : "EN"
    url = I18n.t(:language) == "EN" ? path + "?locale=zh" : path + "?locale=en"
    link_to text, url
  end
end

注:request.path为当前响应的urlI18n.t(:language)是查找翻译文件中对应的值。上面de方法只是实现页面的现实以及params[:locale]的传递。

要实现中英文的切换,我们还需要根据url设置区域。

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :set_locale

  def set_locale
    locales = %W(zh en)
    if params[:locale] and locales.include?(params[:locale])
      cookies.permanent[:locale] = params[:locale]
    end
    I18n.locale = cookies[:locale] || I18n.default_locale
  end

end

你可能感兴趣的:(rails)