gpt4 book ai didi

ruby-on-rails - CanCanCan 在哪里定义 flash "%{subject}",如何修改以符合 Rails 本地化约定?

转载 作者:行者123 更新时间:2023-12-04 06:09:32 25 4
gpt4 key购买 nike

如果资源未经授权,CanCanCan 会显示本地化的 Flash 消息。

https://github.com/CanCanCommunity/cancancan/wiki/Translations-(i18n)

# en.yml
en:
unauthorized:
manage:
all: "You do not have access to %{action} %{subject}!"

我已经翻遍了 GitHub 存储库,但我无法弄清楚 subject 是如何实现的。变量被定义。

从输出中,我猜 subject被定义为类似 object.class.name.underscore .

我想改变它以使用 object.model_name.human .

这将使其与 Rails 约定更加一致,并且更容易本地化。
en:
activerecord:
models:
mymodel: MyLocalizedSubjectName

有人可以指出我定义 subject 的代码吗? ,或建议我如何修补 CanCanCan 以使用本地化的模型名称?

最佳答案

在我看来,消息来自 the unauthorized_message method in ability.rb .特别是这些行:

  variables[:subject] = (subject.class == Class ? subject : subject.class).to_s.underscore.humanize.downcase
message = I18n.translate(keys.shift, variables.merge(scope: :unauthorized, default: keys + ['']))

因此,您可以重新定义该方法来执行您想要的操作(尽管它已经在使用 humanize )。

编辑:包括使用时关于 i18n key 的说明 human和命名空间模型。给定一个像这样的语言环境文件:
en:
activerecord:
models:
user: xxxx
base: aaaa
activerecord/base: bbbb
active_record/base: cccc

我得到这些结果:
2.4.1 :001 > User.model_name.human
=> "xxxx"
2.4.1 :002 > ActiveRecord::Base.model_name.human
=> "cccc"
2.4.1 :003 >

您也可以说 ActiveRecord::Base.model_name.i18n_key以避免一些反复试验。

关于ruby-on-rails - CanCanCan 在哪里定义 flash "%{subject}",如何修改以符合 Rails 本地化约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45341015/

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