【问题标题】:How to set the locale inside an Ajax call in Ruby on Rails?如何在 Ruby on Rails 中的 Ajax 调用中设置语言环境?
【发布时间】:2013-05-25 19:28:32
【问题描述】:

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

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

是否可以在该函数中使用 locale

当我将第 3 行更改为:

url: '/de/projects/get_invoice_types',

我得到了想要的结果(即德语输出)。

但我当然想动态设置它。如何做到这一点?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    你可以在任何你喜欢的地方动态设置它,即

    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标签<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'
        })
    });
    

    当然还有其他选择,这些看起来很简单。

    【讨论】:

      【解决方案2】:

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

      我的情况是语言环境是 url 中的一个参数,但它也可以像 Sagish 那样被注入

      (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);
      

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

      ...   
      var remote_search=$.get("/expenses/search_users/"+$(this).val());
      
          remote_search(function( data ) {
                $("#processing").hide();
                alert( "Usuari inexistent");
                obj_error.val("");
      });
      ...
      

      【讨论】:

        【解决方案3】:

        我通过向我的 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");
        }
        

        【讨论】:

          猜你喜欢
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-15
          • 1970-01-01
          相关资源
          最近更新 更多