在rails上设置html lang属性

时间:2014-06-26 13:39:23

标签: ruby-on-rails

我有一个多语言的rails应用程序。 在base.html.erb上我设置了lang属性:

<html lang="<%= I18n.locale %>" ng-app="myApp">

这是一个很好的方法,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

这可能行得通;尽管您可能希望在控制器中设置当前语言环境以获得更好的灵活性

class ApplicationController < ActionController::Base
  helper_method :current_locale
  ...

  private

  def current_locale
    @current_locale ||= begin
      # complex logic, switching locale based on
      # user defined locale, subdomain, params, etc...
    end
  end
end

然后在您看来:

<html lang="<%= current_locale %>" ng-app="myApp">
...

答案 1 :(得分:0)

如果您想在模板中使用其值,请使用I18n.locale,它会自动获取当前请求的语言环境。如果要根据每个请求的逻辑设置,请考虑在ApplicationController的set_locale中调用around_action方法。本示例将查找持久的用户选择的语言环境,然后查找cookie值,然后默认为应用程序配置值。这还允许您在应用程序的 public 页面中使用和设置语言环境(通过cookie)。

around_action :set_locale

def set_locale(&action)
  # nil until set either as user attribute or via the signin page
  locale = cookies[:locale]
  if current_user
    # Check a logged-in user's locale attribute. Changing the attribute is
    # done via AJAX then reload, so this works when changing the attribute
    locale = current_user.try(:locale)
    cookies[:locale] = locale
  elsif params[:locale]
    # Set the locale cookie via a public page
    locale = params[:locale].to_sym
    cookies[:locale] = locale
  end
  I18n.with_locale(locale || I18n.default_locale, &action)
end

然后在任何控制器或视图/布局中,就像您拥有的一样:

<%= I18n.locale %>