You are right - it will silently fail. If translation does not respond to writer method, we can fallback to current version. So code could look like this:
```ruby
attrs.each do |name, value|
  method_name = "#{name}="
  if translation.respond_to? method_name
    translation.public_send(method_name, value)
  else
    translation[name] = value
  end
end
```
What do you think about this?