tisdag 11 mars 2008

Felmeddelanden på svenska i Rails 2.0.2


varning: Detta är ett av mina tok-nördiga inlägg. Hör du till de vanliga dödliga är det bättre att du bara läser de tre sista raderna i inlägget.


I Ruby on rails händer mycket med automatik. Exempelvis kan du i din modell skriva validates_presence_of :name, :email. Då kollar Rails automatisk om namn och e-post är ifyllda och ger användaren ett felmeddelande där hon informeras om vilka fält som det blev fel på. Smidigt.

Fast om man inte vill ha det på engelska, då?

Vi utgår från att vi Du kan börja med att gå in i new.html.erb och leta efter raden <%= error_messages_for :user %>, den bör finnas ganska långt upp. Vi kan nu ändra till våra egna felmeddelanden:

<%= error_messages_for :user,
:message => 'Följande fel uppstod',
:header_message => 'Användaren kunde inte sparas' %>


Fast specifikationen för exakt vad som gick snett är fortfarande på engelska. För att lösa det kan vi installera Ola Binis fina plugin swe_rails. Du kör bara ruby script/plugin install http://svn.ki.se/rails/plugins/swe_rails ifrån din applikations root-mapp, och vips har du stöd för svenska datum, felmeddelanden och tider. Glöm inte att starta om webbservern så att swe_rails laddas, bara.

Nu är vi nästan i mål. Vi ska se till att våra attribut får svenska namn, bara. "Name får inte vara tomt, och Phone har inte rätt format" ser knasigt ut. Då går vi in i vår modell igen.


def self.human_attribute_name(attribute_key_name)
humanized_attributes = {
:real_name => "Namnet",
:email => "E-postadressen",
:company_name => "Företagets namn",
:organization_number => "Organisationsnumret" ,
:address => "Adressen",
:phone => "Telefonnumret"
}
humanized_attributes[attribute_key_name.to_sym] || attribute_key_name.humanize
end


Du får naturligtvis använda dina egna attribut och översätta dem. En varning om du använder swe_rails ihop med ruby 1.8.6 - det fungerar inte out of the box. Du får gå in i vendors/plugins/swe_rails/lib/sv/date_time.rb och lägga till rescue nil efter alla rader som ruby klagar på när du försöker starta upp din webbserver.




För övrigt har jag skaffat nya glasögon nu. De är dyra som attans och gör så att jag ser bra ut i dubbel bemärkelse enligt Johanna. Ett rätt av två möjliga duger gott för mig.

4 kommentarer:

  1. Hitta en liten bug i Swe_rails. Ajax requests fungerar inte som de ska pga att man ändrar i headern. En enkel lösning är att plocka bort Content-paketet i init.rb

    SvaraRadera
  2. Vad sätter din version av swe_rails content-type till? Det fanns en bugg i tidiga versioner som använde utf8 istället för utf-8 vilket buggade ur i Internet Explorer.

    SvaraRadera