7

Chúng tôi sử dụng một số xác thực tự viết cho các ứng dụng của chúng tôi. Những không sử dụng một trong những đã được dịch như 'trống rỗng' hoặc 'không hợp lệ'. Chúng được formated bằng cách mặc định "% {thuộc tính}% {message}"Rails i18n: thay đổi de.errors.format: "% {attribute}% {message}" không có hiệu lực

Tuy nhiên, khách hàng của chúng tôi yêu cầu để định dạng chúng trong "% {thuộc tính} :.% {message} ", chỉ một số bổ sung dấu chấm câu.

Đây là những thông báo lỗi trong i18n khách hàng:

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

Dẫn đến xấu xí:

Bar sie haben Ihr Schnitzel vergessen 

Vì các thể bị xiềng xích, chúng ta cần phải có họ như thế này:

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

Có thay đổi này trong cơ sở i18n:

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

Không hiển thị hiệu ứng nào cả. Không hoàn toàn loại bỏ hoặc bất cứ điều gì khác. Chúng tôi đang sử dụng formtasticsemantic_errors, nó có cung cấp thông báo lỗi (mặc định) i18n riêng của mình không?

+0

Bạn đang sử dụng chương trình phụ trợ nào của Rails i18n? Ngoài ra, bạn có bật bộ đệm trang, hành động hoặc bộ đệm không? – jpgeek

Trả lời

0

Nếu tôi hiểu đúng câu hỏi của bạn - bạn sử dụng một cái gì đó như thế này trong các hình thức của bạn:

<%= f.semantic_errors :bar %> 

Để thay đổi hành vi semantic_errors bạn có thể khỉ vá phương pháp này. Để làm điều này chỉ cần thêm tập tin {RAILS_ROOT}/config/initializers/semantic_errors_patch.rb với nội dung:

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 

Vá này hoạt động tốt với formtastic 2.2.1rails 3.2.13.

vá này sẽ tạo ra chuỗi tiếp theo cho hai lỗi:

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

Nếu có nhiều lỗi nó sẽ tạo ra một cái gì đó như:

Số tiền: không phải là một con số, không thể để trống, và quá ngắn (tối thiểu là 2 ký tự)

Bạn có thể chenge hành vi này trên dòng này:

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

@object.errors[method.to_sym] - là tập hợp các lỗi w hich sản xuất cuối cùng errors chuỗi.

Các vấn đề liên quan