Jquery ActionView::缺少模板(缺少模板应用程序/设置语言环境)
我目前正在通过AJAX将Jquery ActionView::缺少模板(缺少模板应用程序/设置语言环境),jquery,ruby-on-rails,Jquery,Ruby On Rails,我目前正在通过AJAX将locale参数传递给ApplicationController中的以下函数,在我的ApplicationController中设置locale: def set_locale I18n.locale = params[:locale] || I18n.default_locale Rails.logger.debug(I18n.locale) Rails.logger.debug(params) end 我如何简单地:为所有 =t 命令而不渲染单独的视图,但保持
locale
参数传递给ApplicationController中的以下函数,在我的ApplicationController
中设置locale
:
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
Rails.logger.debug(I18n.locale)
Rails.logger.debug(params)
end
我如何简单地:为所有
=t
命令而不渲染单独的视图,但保持相同的DOM 我使用了以下系统:
在我的导航菜单中
<%= form_tag local_switcher_home_index_path, :class => 'locale' do %>
<%= select_tag 'locale_set', options_for_select(LANGUAGES, I18n.locale.to_s), :onchange => 'this.form.submit()' %>
<% end %>
在myhome\u controller.rb中
def local_switcher
if params[:locale_set]
I18n.locale = params[:locale_set].to_sym
set_session_and_redirect
end
end
def set_session_and_redirect
session[:locale] = I18n.locale
redirect_to :back
rescue ActionController::RedirectBackError
redirect_to :root
end
假设我当前在我的主页/index.html.erb页面上
对于打印文本,我将使用:
<%= t('home.index.value') %>
希望这会有帮助 问题标题中的错误是由于在应用程序控制器
中不当使用了设置语言环境
方法造成的。您将它视为一个操作,换句话说,您向它发出请求,无论是通过AJAX还是常规GET请求。当请求点击此操作时,它将尝试呈现相同名称的视图。很明显,在视图目录中没有set\u locale.html.erb
视图。要解决此问题,只需在set\u locale
方法的底部render nothing:true
但是,你到底想用这个实现什么呢?似乎您正在通过在页面加载后触发AJAX调用来设置区域设置。我知道这可能是因为用户从下拉列表中选择了区域设置或其他内容,而您不想重新加载页面。但是,重新加载页面将是最简单的事情。由于您提到视图中的每个位置都有=t
,因此确实需要控制器重新渲染这些视图
如果您必须保持相同的DOM,则必须使用JSON编写您自己的解决方案。让set_locale
操作呈现JSON对象,例如:
{
"#text_element1": I18n.t('the.text'),
"#some-other-element": I18n.t('some.other.text')
}
然后让ajax成功回调函数找到键给定的元素,并将JSON值给定的文本插入其中
en:
home:
index:
value: "Yo!"
de:
home:
index:
value: "Do!"
{
"#text_element1": I18n.t('the.text'),
"#some-other-element": I18n.t('some.other.text')
}