代码之家  ›  专栏  ›  技术社区  ›  Kingsley Simon

如果从帮助器方法rails更改,则不会显示I18n转换的值

  •  0
  • Kingsley Simon  · 技术社区  · 6 年前

    你好,我不知道该怎么解释,但我会尽我最大的努力。

    我是这样的模特

    class Answer < ActiveRecord::Base
      EMPLOYMENT_TYPE = [
        ['Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.employed')],
        ['Self-Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.self_employed')],
        ['Unemployed / Retired', I18n.t('self_evaluation.self_evaluation_form.employment_status.unemployed')]
      ]
    end
    

    我还有一个助手方法可以调用

    module AnswerHelper
      def get_employment_type_list
        return Answer::EMPLOYMENT_TYPE
      end
    end
    

    以及一个局部视图,它应该显示如下值

    _第一步。html。雇员再培训局

    <% employment_list = get_employment_type_list %>
    <%= employment_list %>
    <div class="flex_center flex_column button-wrap">
      <%= collection_radio_buttons("application[answer_attributes]", :employment_type, employment_list, :first, :last, item_wrapper_tag: false, checked: @selected_employment_type) do |b|
        b.label(class: 'employment_type_radio') { b.radio_button(:onchange => "return_employment_type(value)", class:'radio-label')  + b.label(class:'button-label'){b.text}}
      end %>
    </div>
    

    _第2步。html。雇员再培训局

    <% employer_list = get_employer_list(chosen_employment_type(@decoded_self_evaluation)) %>
    <% employer_type = @decoded_self_evaluation.try(:loan_application).try(:kyc_answer).try(:employer_type) %>
    <div class="flex_center flex_column button-wrap">
      <%= collection_radio_buttons("loan_application[kyc_answer_attributes]", :employer_type, employer_list, :first, :last, item_wrapper_tag: false, checked: employer_type) do |b|
        b.label(class: 'employer_type_radio') { b.radio_button(:onchange => "is_business_registered(value)", class:'radio-label') + b.label(class:'button-label'){b.text}}
      end %>
    </div>
    

    身份js

    $.ajax({
        url:'/self_evaluations/' + self_evaluation_id + '/employment_type',
        method:"POST",
        data:JSON.stringify({employment_type: employment_type, key: $('#token_key').val()}),
        contentType:"application/json; charset=utf-8",
        dataType:"script",
        async: false,
        success: function(data) {
          $valid = true;
        }
      })
    

    就业清单。js。雇员再培训局

    $('#id_employer').empty();
    $('#id_employer').append("<%=j render 'self_evaluations/self_evaluation_partials/step_2' %>");
    

    现在的问题是,我已经添加了在Rails中进行I18n翻译所需的所有内容,对于在html视图中翻译的文本,当我从不同的语言切换时,它可以正常工作,但对于通过类似这样的帮助器方法获得的文本。根据初始帮助,在初始加载时,所有页面都可以正常工作,但如果我更改语言,然后运行ajax调用来加载就业列表。js。erb my locale似乎仍然是主要语言,其值不会相应改变

    不知道为什么会发生这样的事以前有人遇到过这样的事吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   fongfan999    6 年前

    因为您在模型中将翻译声明为常量,所以在 Answer 模型是第一次加载的。

    在里面 production 环境中,启动服务器后将加载模型。在里面 development 环境中,当文件内容发生更改时,将加载模型。。。

    为了解决问题,您可以在助手中添加翻译:

    module AnswerHelper
      def get_employment_type_list
        [
          ['Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.employed')],
          ['Self-Employed', I18n.t('self_evaluation.self_evaluation_form.employment_status.self_employed')],
          ['Unemployed / Retired', I18n.t('self_evaluation.self_evaluation_form.employment_status.unemployed')]
        ]
      end
    end
    

    我通常使用这种方法,请看一看!

    class Answer < ActiveRecord::Base
      EMPLOYMENT_TYPE = [:employed, :self_employed, :unemployed_or_retired]
    end
    
    module AnswerHelper
      def get_employment_type_list
        i18n_scope = 'self_evaluation.self_evaluation_form.employment_status'
    
        Answer::EMPLOYMENT_TYPE.map do |type|
          [type, t(type, scope: i18n_scope)]
        end
      end
    end