Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ActionView::缺少模板(缺少模板应用程序/设置语言环境)_Jquery_Ruby On Rails - Fatal编程技术网

Jquery ActionView::缺少模板(缺少模板应用程序/设置语言环境)

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 命令而不渲染单独的视图,但保持

我目前正在通过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


命令而不渲染单独的视图,但保持相同的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')
}