Article View: pl.comp.lang.ruby
Article #322Re: Spolszczenie 'error_messages_for'
From: Marcin Mielżyński
Date: Fri, 24 Nov 2006 20:15
Date: Fri, 24 Nov 2006 20:15
125 lines
4219 bytes
4219 bytes
RaW wrote:
> W jaki sposób radzicie sobie z tłumaczeniem komentarzy o błędach
> validacji formularzy?
>
> Ja doszedłem do tego, że w environment.rb mam przykładowo zdefiniowane
> @@default_error_messages:
>
> ActiveRecord::Errors.default_error_messages = {
> :inclusion => "nie wystepuje na liście",
> [...]
> :not_a_number => "nie jest liczbą"
> }
>
> Niewiele to daje bo <%= error_messages_for 'post' %> w widoku .rhtml
> wyrzuca mi coś takiego:
>
> 3 errors prohibited this post from being saved
> There were problems with the following fields:
> * Period nie może być pusty
> * Title nie może być pusty
> * Body nie może być pusty
>
> Dla każdego pola z osobna można użyć:
> <%= error_message_on "post", "period", "Okres ", " - uzupełnij to pole",
> "errorExplanation" %>
> ale nie o to mi chodzi - chcę mieć tekst jaki daje 'error_messages_for'
> ale po polsku. Dodatkowo chciałbym podmienić nazwy zmiennych(pól).
> Jest na to jakiś myk?
>
> Z góry dzięki za odpowiedzi.
dla pól (w formacie 'tabela.kolumna'):
zakładając że metoda _r_ klasy String rozkodowuje zasoby z bazy danych, np:
"period.date_from".r -> Data od
module ActiveRecord
class Errors
@@default_error_messages[:inclusion] = "val.inclusion".r
@@default_error_messages[:exclusion] = "val.exclusion".r
# itd
def full_messages
full_messages = []
@errors.each_key do |attr|
@errors[attr].each do |msg|
next if msg.nil?
if attr == "base"
full_messages << msg
else
full_messages <<
(Inflector.underscore(@base.class.name)+'.'+attr.to_s).r + " " + msg
end
end
end
return full_messages
end
end
end
spolszczenie ...following... prohibited... :
module ActionView #nodoc
module Helpers
module ActiveRecordHelper
def error_messages_for(object_name, options = {})
options = options.symbolize_keys
object = instance_variable_get("@#{object_name}")
unless object.errors.empty?
content_tag("div",
content_tag(
options[:header_tag] || "h2",
"#{pluralize_word(object.errors.count,'occurred').r}
#{object.errors.count} #{pluralize_word(object.errors.count,'error').r}
#{'prohibited_save'.r}"
) +
content_tag("p", "#{'fields_problem'.r}:") +
content_tag("ul", object.errors.full_messages.collect { |msg|
content_tag("li", msg) }),
"id" => options[:id] || "errorExplanation", "class" =>
options[:class] || "errorExplanation"
)
end
end
private
# uwzględnienie przypadków: błąd, błędy, błędów
# w zasobach będzie np:
# error1=błąd
# error2=błędy
# error3=błędów
def pluralize_word count, res
case count
when 1
res + "1"
when 2..4
res + "2"
when 5..20
res + "3"
else
"???"
end
end
end
end
end
najlepiej to podpiąć jako plugin - sprawdza się rewelacyjnie, przy
okazji można załatwić całą i18n, przkodowywania itd...
lopex
Technical Details
Message-ID:
<ek7jts$ebu$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mailReferences:
<ek7idq$ppq$1@news.task.gda.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail From: Marcin Mielżyński <lopx@gazeta.pl> Newsgroups: pl.comp.lang.ruby Subject: Re: Spolszczenie 'error_messages_for' Date: Fri, 24 Nov 2006 21:15:52 +0100 Organization: Onet.pl Lines: 125 Message-ID: <ek7jts$ebu$1@news.onet.pl> References: <ek7idq$ppq$1@news.task.gda.pl> NNTP-Posting-Host: chello087207013012.chello.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1164399357 14718 87.207.13.12 (24 Nov 2006 20:15:57 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Fri, 24 Nov 2006 20:15:57 +0000 (UTC) X-Sender: 5Da2qcG7AWj7WISFX859Php/OS6q4VnB In-Reply-To: <ek7idq$ppq$1@news.task.gda.pl> User-Agent: Thunderbird 1.5.0.8 (Windows/20061025) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit