如何在Rails中将I18n.js与handlebars.js结合使用

时间:2018-12-13 16:37:56

标签: ruby-on-rails handlebars.js i18n-gem

我在Rails应用程序中使用'handlebars_assets'i18n-js,我有一个车把模板,我想在其中转换Rails模型对象属性。

app / assets / javascripts / templates / questions.show.hbs

<div class="question-body">
      <div><strong>{{tAttr 'body'}}:</strong> {{question.body}}</div>
      {{#if question.race}}
        <div><strong>{{tAttr 'which_race'}}:</strong> {{question.which_race}}</div>
      {{/if}}
      <div><strong>{{tAttr 'half_breed'}}:</strong> {{question.half_breed}}</div>
      <div><strong>{{tAttr 'age'}}:</strong> {{question.age}}</div>
      <div><strong>{{tAttr 'weight'}}:</strong> {{question.weight}}</div>
      <div><strong>{{tAttr 'gender'}}:</strong> {{question.gender}}</div>
</div>  

我有一个简单的表单,该表单与remote: true异步提交,如果创建了记录,则将上面的模板附加到DOM。这是我处理AJAX响应的JS部分。

Handlebars.registerHelper('tAttr',
      function(str){
        return (I18n != undefined ? I18n.t('activerecord.attributes.question.' + str) : str);
      }
    );

$('#question-form').on('ajax:success', function (evt, question, status, xhr) {
    var $form = $(evt.currentTarget);
    var questionHTML = HandlebarsTemplates['questions/show']({
      question: question,
      idx: Date.now(),
      authToken: $('meta[name="csrf-token"]').attr('content')
    });
    $('#questions').prepend(questionHTML);

    $form.find('input[type=text], textarea').val('');
    $form.find('.form-errors').html('');
  });

在这里我应该有德语名称,但是我有英语名称。我已经确认服务器上的I18n.locale:de,但是我正在获取属性的英文名称。我尝试通过rake i18n:js:export手动导出翻译,但这无济于事。我该如何解决?

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。我已经学会了在DevTools中调试JavaScript,并且能够注意到I18n.defaultLocale设置为“ en”。我已通过在Rails视图中添加此代码段来解决此问题。

<script>
  I18n.locale = "de"
</script>