gpt4 book ai didi

ruby-on-rails - Rails : Model. human_attribute_name :field should raise an error when translation not found?(可能是由 state_machine 引起的?)

转载 作者:行者123 更新时间:2023-12-04 06:10:33 26 4
gpt4 key购买 nike

我们经常在应用程序中偶然发现未翻译的模型属性。它们最常出现是因为属性被重命名或类似的原因。

Model.human_attribute_name :field 找不到翻译时,让 I18n 引发错误真的很有帮助。有办法实现吗?

更新:

看来还有其他问题。这是我的 I18n 设置:

I18n.enforce_available_locales = false
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = 'de-CH'
config.i18n.available_locales = ['de', 'de-CH', 'en']
config.i18n.locale = 'de-CH'
config.i18n.fallbacks = {'de-CH' => 'de', 'en-GB' => 'en'}

我无法设置 fallbacks = false 因为我希望缺少 de-CH 的翻译以优雅地委托(delegate)给 de,这通常似乎工作正常。但是对于我的 state machine属性 human_to_state 方法似乎不起作用。这是导致问题的 View 代码:

= f.input :state_event, collection: f.object.state_transitions,
label_method: :human_to_name # This causes the problem!

这在 View 中打印为“State event”,当我添加以下 I18n 键时,它已成功转换为“Status”:

德: mongoid: 属性: 事件: state_event:状态

因此确实 缺少翻译,但 I18n 不会以任何方式提示。我还尝试使用自定义异常处理程序捕获异常,但这似乎没有被引发:

I18n.exception_handler = lambda do |exception, locale, key, options|
binding.pry # This is never reached!
end

知道发生了什么事吗?是不是状态机的问题?

最佳答案

问题在于 human_attribute_name 回落到

defaults << attribute.to_s.humanize

当没有找到其他东西时。换句话说,human_attribute_name 永远不会引发错误。

我通过覆盖 human_attribute_name 来“修复”这个问题,修补上面提到的行:

(将其放入初始化程序中)

require 'active_support/core_ext/hash/reverse_merge'

module ActiveModel
module Translation
include ActiveModel::Naming

def human_attribute_name(attribute, options = {})
defaults = lookup_ancestors.map do |klass|
[:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}",
:"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key.to_s.tr('.', '/')}.#{attribute}"]
end.flatten

defaults << :"attributes.#{attribute}"
defaults << options.delete(:default) if options[:default]
defaults << attribute.to_s.humanize if Rails.env.production? # Monkey patch

options.reverse_merge! :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
end
end

关于ruby-on-rails - Rails : Model. human_attribute_name :field should raise an error when translation not found?(可能是由 state_machine 引起的?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20976713/

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