如何在Ruby on Rails中设置Ajax调用内的语言环境?

时间:2013-05-25 19:28:32

标签: ruby-on-rails ruby ruby-on-rails-3 jquery ruby-on-rails-3.2

我在application.js文件中有这个Ajax函数:

$("#project_person_id").change(function() {
    $.ajax({
        url: '/projects/get_invoice_types',
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

是否可以在该功能中使用区域设置

当我将第3行更改为:

url: '/de/projects/get_invoice_types',

我得到了预期的结果(即德语输出)。

但我当然想动态设置它。怎么办呢?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您可以在任何地方动态设置它,即

var locale = "de"; // set it dynamically

并将其用作全局,如此

$("#project_person_id").change(function() {
    $.ajax({
        url: "/"+locale+'/projects/get_invoice_types', // use it
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

更优雅的原因是将其设置为正文标记<body data-locale="de">或HTML标题<html lang="de">的数据属性,并使用函数将其拉出

function locale() { return $("body").data("locale") }function locale() { return $("html").attr("lang") },然后像这样检索它:

$("#project_person_id").change(function() {
    $.ajax({
        url: "/"+locale()+'/projects/get_invoice_types', // use it
        data: 'person_id=' + this.value,
        dataType: 'script'
    })
});

当然还有其他选择,这些似乎很简单。

答案 1 :(得分:0)

我解决了修改$ .get和$ .post jQuery函数的问题。

我的情况我的情况是语言环境是网址中的参数,但它可以作为 Sagish 进行注入

col-md-9

当我调用$ .get或$ .post时,语言环境会自动添加到URL:

(function ($) {
  var oPost = jQuery.post;
  var oGet = jQuery.get;

  jQuery.post=function(url , data , success , dataType ){
    if (typeof data === "undefined") {
      data={};
    }
    data=add_locale_to_url(data);
    return oPost.apply(this,[url , data , success , dataType]);
  }  

  jQuery.get=function(url , data , success , dataType ){    
    if (typeof data === "undefined") {
      data={};
    }
    data=add_locale_to_url(data);    
    return oGet.apply(this,[url , data , success , dataType]);
  } 

})(jQuery);

答案 2 :(得分:0)

我通过向erb模板添加数据属性解决了这个问题。

<button type="button" class="btn btn-success" id="save-job-position-btn" data-locale="<%= params[:locale] %>"><%= t("save") %></button>
$( "#save-job-position-btn" ).click(function() {
  var locale = $(this).data("locale");
}