我有一个多语言的rails应用程序。 在base.html.erb上我设置了lang属性:
<html lang="<%= I18n.locale %>" ng-app="myApp">
这是一个很好的方法,还是有更好的方法?
答案 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 %>