我正在尝试翻译https://github.com/lifo/docrails/blob/master/activerecord/lib/active_record/associations.rb
在我的控制器文件中,我有:
@book = Book.find(params[:id])
begin
@book.destroy
rescue ActiveRecord::DeleteRestrictionError => e
flash[:error]= e.message # <<< Translate this message ?
end
这是我使用的翻译文件:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/th.rb
如何为translate "#{e.message}"
编写代码?
答案 0 :(得分:1)
您可以在en.yml
文件
activerecord:
book:
error: 'book error: %{e}'
你可以用这个
来拯救你的救援区flash[:error] = t("book.error") % {:e => e.message}
这适用于案例
答案 1 :(得分:0)
我曾经遇到过同样的问题。
所以有两种解决方案;
a。您可以通过手动指定“代码”来自己翻译已翻译的错误
@book = Book.find(params[:id])
begin
@book.destroy
rescue ActiveRecord::DeleteRestrictionError => e
flash[:error]= I18n.t('en.activerecord.errors.messages.restrict_dependent_destroy')
end
b。或者,您可以使用仍在使用的宝石rails-i18n
;
首先,您需要配置book
模型:
has_many :children, dependent: :restrict_with_error
那你就可以做
@book = Book.find(params[:id])
if @book.destroy
# show success message
else
flash[:error] = resource.errors.messages[:base].join(', ')
# should include the translated error message if you are using rails-i18n
end
我假设您使用的是:restrict_with_exception
而不是:restrict_with_error
,只是为了以防万一。