# I18 Issue injecting keys

**URL:** <https://discourse.dry-rb.org/t/i18-issue-injecting-keys/882>\
**Category:** dry-validation\
**Created:** [August 8, 2019, 1:58pm UTC](https://discourse.dry-rb.org/t/i18-issue-injecting-keys/882 "2019-08-08T13:58:24Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![raivil](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/raivil/32/421_2.png) [@raivil](https://discourse.dry-rb.org/u/raivil)\
**Post date:** [August 8, 2019, 1:58pm UTC](https://discourse.dry-rb.org/t/i18-issue-injecting-keys/882/1 "2019-08-08T13:58:24Z")

</div>

Hey All,  
I’ve noticed that dry-validation is injecting values into Rails I18n.

After loading a contract with i18n two keys are being added.

> :acceptance=\>“must accept %{key}” (under :errors)  
> :or=\>“or” (on root)

I’ve created a clean rails app and tested on the console to show what’s happening.

> ruby ‘2.5.3’  
> gem “dry-validation”, “~\> 1.2.1”  
> gem ‘rails’, ‘~\> 5.2.3’

> errors.en.yml file is basically empty.

> Loading development environment (Rails 5.2.3)  
> irb(main):001:0\> class ApplicationContract \< Dry::Validation::Contract  
> irb(main):002:1\> config.messages.backend = :i18n  
> irb(main):003:1\> config.messages.load\_paths \<\< File.join(Rails.root, “config”, “locales”, “dry-validations”, “errors.en.yml”)  
> irb(main):004:1\> end  
> irb(main):005:0\>  
> irb(main):006:0\> I18n.translate(:test) # force load translations  
> =\> “translation missing: en.test”  
> irb(main):007:0\> I18n.backend.translations[:en][:dry\_validation].present?  
> =\> false  
> irb(main):008:0\>  
> irb(main):009:0\> class SomeContract \< ApplicationContract  
> irb(main):010:1\> json do  
> irb(main):011:2\* required(:order).hash do  
> irb(main):012:3\* required(:count).value(:string)  
> irb(main):013:3\> required(:middle\_name).value(:string, max\_size?: 4)  
> irb(main):014:3\> end  
> irb(main):015:2\> end  
> irb(main):016:1\> rule(“order.count”) do  
> irb(main):017:2\* key.failure(:bool?) if 1 + 1 == 2  
> irb(main):018:2\> end  
> irb(main):019:1\> end  
> =\> #\<Dry::Validation::Rule keys=[“order.count”]\>  
> irb(main):020:0\> I18n.backend.translations[:en][:dry\_validation][:errors][:acceptance].present?  
> =\> true  
> irb(main):021:0\> I18n.backend.translations[:en][:dry\_validation][:or].present?  
> =\> true

---

<div class="post-metadata">

**Author:** ![solnic](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.dry-rb.org/solnic/32/779_2.png) [@solnic](https://discourse.dry-rb.org/u/solnic)\
**Post date:** [August 12, 2019, 3:28pm UTC](https://discourse.dry-rb.org/t/i18-issue-injecting-keys/882/2 "2019-08-12T15:28:54Z")

</div>

It’s not Rails I18n, it’s just I18n. When you configure dry-validation to use I18n, it’s gonna add its keys to the translations. Is this a problem for some reason?
