如果从辅助方法 rails 更改,则 I18n 翻译值不会显示
I18n translated values do not show up if changed from helper method rails
您好,我不知道该如何解释,但我会尽力而为。
我有一个这样的模型
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
以及应该显示这样的值的部分视图
_step_1.html.erb
<% 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>
_step_2.html.erb
<% 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>
identity.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;
}
})
employment_list.js.erb
$('#id_employer').empty();
$('#id_employer').append("<%=j render 'self_evaluations/self_evaluation_partials/step_2' %>");
现在的问题是,我已经添加了在 Rails 中进行 I18n 翻译和在 html 视图中翻译的文本所需的所有内容,当我从不同的语言,但对于通过这样的辅助方法获取的文本。根据初始帮助,在初始加载时,所有页面都可以正常工作,但是如果我更改语言然后 运行 加载 employment_list.js.erb 的 ajax 调用,我的语言环境似乎仍然是主要语言值不会相应改变
不确定为什么会发生这种情况以前有人遇到过类似的事情吗?
因为您在模型中将翻译声明为常量,所以翻译只在 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
您好,我不知道该如何解释,但我会尽力而为。
我有一个这样的模型
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
以及应该显示这样的值的部分视图
_step_1.html.erb
<% 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>
_step_2.html.erb
<% 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>
identity.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;
}
})
employment_list.js.erb
$('#id_employer').empty();
$('#id_employer').append("<%=j render 'self_evaluations/self_evaluation_partials/step_2' %>");
现在的问题是,我已经添加了在 Rails 中进行 I18n 翻译和在 html 视图中翻译的文本所需的所有内容,当我从不同的语言,但对于通过这样的辅助方法获取的文本。根据初始帮助,在初始加载时,所有页面都可以正常工作,但是如果我更改语言然后 运行 加载 employment_list.js.erb 的 ajax 调用,我的语言环境似乎仍然是主要语言值不会相应改变
不确定为什么会发生这种情况以前有人遇到过类似的事情吗?
因为您在模型中将翻译声明为常量,所以翻译只在 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