:delete %> 它通常会显示为: Delete! 但是如果翻译为 a-6ren">
gpt4 book ai didi

ruby-on-rails - 从 I18n "translation missing"消息中删除 html 标签

转载 作者:行者123 更新时间:2023-12-04 15:14:01 26 4
gpt4 key购买 nike

在 View 中考虑以下代码:

<%= link_to 'Delete!', item ,  :confirm => t('action.item.confirm_deletion'), :method => :delete %>

它通常会显示为:
<a href="/items/123" data-confirm="Confirm deletion?" data-method="delete" rel="nofollow">Delete!</a>

但是如果翻译为 action.item.confirm_deletion 由于某种原因(不完整的 yml 文件、错别字等)丢失,结果为:
<a href="/items/123" data-confirm="<span class="translation_missing" title="translation missing: sv.action.item.confirm_deletion">Confirm Deletion</span>" data-method="delete" rel="nofollow">Delete!</a>

这是无效的 html,用户将在主页上看到损坏的 html 标签。
在某些情况下,这也可能是安全风险。

我知道我可以在每次调用 I18n.t 函数时使用 apply some escaping,但这对于任务来说是不必要的重复。

所以我的问题是:
有没有办法让“翻译丢失”-消息不包含 html 代码。

最佳答案

有多种解决方案适合您。

您可以将翻译方法别名为您自己的,并使用自定义 :default 进行调用。值(value)(我更喜欢这种方式):

module ActionView
module Helpers
module TranslationHelper
alias_method :translate_without_default :translate

def translate(key, options = {})
options.merge!(:default => "translation missing: #{key}") unless options.key?(:default)
translate_without_default(key, options)
end
end
end
end

或者您可以覆盖默认值:
module I18n
class MissingTranslation
def html_message
"translation missing: #{keys.join('.')}"
end
end
end

关于ruby-on-rails - 从 I18n "translation missing"消息中删除 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com