如何正确翻译Rails链接的disable_with提示信息?
Rails link_to中disable_with翻译字符串无法插值的解决方法
在Rails的link_to辅助方法中,给disable_with设置翻译文本时出现插值失败问题:点击按钮后,按钮显示的是#{i18n.t(:client_wait_message)}而非实际翻译内容,但在link_to块内的<%= t :client_loading_button_message %>却能正常输出翻译结果。
原代码
<%= link_to "launch_presentation_return_url", { data: {turbo: false, disable_with: '<i class="fa fa-spinner fa-spin"></i>#{i18n.t(:client_wait_message)}'}, class: 'btn btn-primary float-right', 'data-toggle' => 'tooltip', 'data-placement' => 'top', 'title' => 'test', 'data-original-title' => '', } do %> <i class="fa fa fa-book"></i> <%= t :client_loading_button_message %> <% end %>
问题原因
原代码里disable_with被放在data哈希内部的单引号字符串中,Ruby的单引号字符串不会执行插值操作,所以#{i18n.t(:client_wait_message)}被当作纯文本直接输出,没有解析成翻译后的内容。
解决方法及修改后代码
将disable_with从data哈希中移出,改用data-disable-with作为独立的HTML选项键(Rails会自动识别这类data-*格式的选项),同时使用双引号包裹字符串以启用Ruby插值,确保t helper能正常解析翻译:
<%= link_to session.to_hash["api_request_params"]["launch_presentation_return_url"], html_options = { data: { turbo: false }, 'data-disable-with' => "<i class='fa fa-spinner fa-spin'></i>#{t :client_loading_button_message}", class: 'btn btn-primary float-right', 'data-toggle' => 'tooltip', 'data-placement' => 'top', 'title' => "#{t :client_loading_button_message}", 'data-original-title' => "", } do %> <i class="fa fa fa-book"></i> <%= t :client_loading_button_message %> <% end %>
内容的提问来源于stack exchange,提问作者Nick_K
相关产品推荐
相关产品推荐

