Pam*_*orp 38 error-handling message localization ruby-on-rails internationalization
我有使用特殊验证的属性,其中我使用message子句显示仅用于该验证的特殊消息.这是一个例子:
validates :email, presence: true, length: { maximum: 60 },
format: { with: valid_email_regex, message: "is not a valid email address format." },
uniqueness: { case_sensitive: false }
Run Code Online (Sandbox Code Playgroud)
我想在这里翻译消息,但我不知道该怎么做.
我看过他们输入类似这样的例子:message:t("some_value_here").我不确定这个名称.我试过这样的消息:t(:bad_email).我在我的yaml文件中做了以下尝试.
activemodel:
errors:
bad_email: "is not a valid email address format."
Run Code Online (Sandbox Code Playgroud)
当我尝试访问我的Rails应用程序时,我收到以下错误:
ActionView::Template::Error (undefined method `t' for #<Class:0x007fefc1b709e0>)
Run Code Online (Sandbox Code Playgroud)
我也在我的yaml文件中尝试过这个:
activemodel:
errors:
user:
bad_email: "is not a valid email address format."
Run Code Online (Sandbox Code Playgroud)
我一整天都在研究这个问题.我能找到的就是替换内置的错误哈希,如空白或空.有没有办法让我有自定义错误哈希并在模型中替换它们?在这一点上,我不能让t以编码方式工作.我希望问题是我如何设置我的yaml文件.我已经看到了如何设置它的不同版本.我不确定我是否应将其放在activemodel或activerecord下.我假设activemodel,因为那是我要翻译的自定义消息.
任何帮助,将不胜感激.这是我在启动应用程序的第一次翻译之前需要弄清楚的最后一部分.
更新日期7/29/2013 7:30 pm CDT
bgates给了我一个非常好的开始,如何设置我的模型文件以接收YAML文件中的自定义消息.但是我最终必须在我的yaml文件中进行以下设置才能找到自定义消息.
activerecord:
errors:
models:
user:
attributes:
bio:
no_links: "cannot contain email addresses or website links (URLs)."
email:
bad_email: "is not a valid email address format."
username:
bad_username: "can only contain numbers and letters. No special characters or spaces."
Run Code Online (Sandbox Code Playgroud)
bga*_*tes 75
使用符号作为消息:
validates :email, presence: true, length: { maximum: 60 },
format: { with: valid_email_regex, message: :bad_email },
uniqueness: { case_sensitive: false }
Run Code Online (Sandbox Code Playgroud)
然后在yaml文件中
[lang]:
activerecord:
errors:
messages:
bad_email: "just ain't right"
Run Code Online (Sandbox Code Playgroud)
如果有特定于此模型的翻译,它将覆盖上面的一般翻译:
[lang]:
activerecord:
errors:
models:
model_name: # or namespace/model_name
attributes:
email:
bad_email: "model-specific message for invalid email"
Run Code Online (Sandbox Code Playgroud)
如果您编写自定义验证,add_error(:email, :bad_email)将执行上面的查找,但errors[:email] << :bad_email不会.
oma*_*oma 22
我刚刚完成了所有这些,发现自定义验证器的导轨指南太硬编码了...我在这里发布这个,即使它不是你问的那个,但是Q标题非常合适(这就是我读这篇文章的原因)对于我的问题).
使用i18n消息进行自定义验证:
validate :something_custom?, if: :some_trigger_condition
def something_custom?
if some_error_condition
errors.add(:some_field_key, :some_custom_msg)
end
end
# en.yml
activerecord:
errors:
models:
some_model:
some_custom_msg: "This is i18n controlled. yay!"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23205 次 |
| 最近记录: |