Thread View: pl.comp.lang.ruby
2 messages
2 total messages
Started by RaW
Fri, 24 Nov 2006 19:50
Spolszczenie 'error_messages_for'
Author: RaW
Date: Fri, 24 Nov 2006 19:50
Date: Fri, 24 Nov 2006 19:50
31 lines
1719 bytes
1719 bytes
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.
--
RaW
Re: Spolszczenie 'error_messages_for'
Author: 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads