Как использовать I18n.js с handlebars.js в Rails - PullRequest
0 голосов
/ 13 декабря 2018

Я использую '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.Это моя часть JS, где я обрабатываю ответ AJAX.

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 голосов
/ 14 декабря 2018

Мне удалось это исправить.Я научился отлаживать JavaScript в DevTools и смог заметить, что для I18n.defaultLocale было установлено значение «en».Я исправил это, добавив этот фрагмент в моем представлении рельсов.

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