7

アプリケーションには、いくつかの自己記述検証を使用します。これらは、「空」や「無効」など、すでに翻訳されているものの1つを使用しないでください。デフォルトの方法「%{attribute}%{message}」でフォーマットされます

ただし、お客様は「%{attribute} %{message} 」でフォーマットすることを要求しています。句読点をいくつか追加しただけです。

カスタマーi18nのエラーメッセージは次のとおりです。

errors:  
  models: 
    foo:
      attributes:
        bar:
          steak_missing: sie haben Ihr Schnitzel vergessen
          beer_missing: sie haben Ihr Bier vergessen

醜いことにつながる:

Bar sie haben Ihr Schnitzel vergessen 

これらは連鎖する可能性があるため、次のようにする必要があります。

Bar: sie haben Ihr Schnitzel vergessen, sie haben Ihr Bier vergessen.

ベースi18nでこれを変更しました:

  errors: &errors
    format: ! "%{attribute}: %{message}." 

まったく効果がありません。完全に削除することも、他のこともしません。formtasticとそのsemantic_errorsを使用していますが、(デフォルトの)エラーメッセージに独自のi18nを提供していますか?

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、フォームで次のようなものを使用します。

<%= f.semantic_errors :bar %>

動作を変更semantic_errorsするには、このメソッドにモンキー パッチを適用します。これを行うには{RAILS_ROOT}/config/initializers/semantic_errors_patch.rb、コンテンツを含むファイルを追加するだけです:

Formtastic::Helpers::ErrorsHelper.class_eval do
  def semantic_errors(*args)
    html_options = args.extract_options!
    args = args - [:base]

    full_errors = args.inject([]) do |array, method|
      attribute = localized_string(method, method.to_sym, :label) || humanized_attribute_name(method)
      errors = Array(@object.errors[method.to_sym]).to_sentence
      errors.present? ? array << [attribute, errors].join(": ") : array ||= []
    end
    full_errors << @object.errors[:base]
    full_errors.flatten!
    full_errors.compact!

    return nil if full_errors.blank?

    html_options[:class] ||= "errors"
    template.content_tag(:ul, html_options) do
      Formtastic::Util.html_safe(full_errors.map { |error| template.content_tag(:li, Formtastic::Util.html_safe(error)) }.join)
    end
  end
end

formtastic 2.2.1このパッチはとでうまく機能しrails 3.2.13ます。

このパッチは、2 つのエラーに対して次の文字列を生成します。

バー: sie haben Ihr Schnitzel vergessen und sie haben Ihr Bier vergessen.

さらにエラーがある場合、次のようなものが生成されます。

金額: 数字ではありません。空白にすることはできません。また、短すぎます (最小 2 文字)。

この動作は次の行で変更できます。

errors = Array(@object.errors[method.to_sym]).to_sentence

@object.errors[method.to_sym]- 最終文字列を生成するエラーのコレクションですerrors

于 2013-06-29T14:13:22.637 に答える