Entries from April 2008 ↓

Lokalizácia Ruby on Rails - helper pluralize


Helper pluralize(count,singular,plural) je krásny príklad podstaty agilného vývoja. Zjednoší nám výpis správneho tvaru podstatného mena s predchádzajúcou číslovkou. Napríklad kód:

<%= pluralize(count,"vote","votes") %>

nám pod anketou pomôže vypísať 1 vote resp. 2 votes, 3 votes ..atď, v závislosti na hodnote parametra count.

Ak by sme sa ho však pokúsili použiť na slovenskom webe, narazili by sme na záludnosť Slovenčiny - a síce, že podstatné meno za číslovkou sa nedá definovať iba dvoma možnosťami: 

  • 0 osôb
  • 1 osoba
  • 2,3,4 osoby
  • 5,6,7.. osôb

Každopádne nejaký systém v tom určite je a preto ma napadlo preťažiť si tento helper tak, aby som ho mohol využívať aj pri týchto (nielen) slovenských špecifikách. A to všetko pri zachovaní pôvodnej funkcionality pre anglické slová. Stačí do projektového súboru application_helper.rb pridať nasledujúci kód:

module ActionView
module Helpers
module TextHelper
def pluralize(count, singular, plural = nil, even_more = nil)
"#{count || 0} " + if count == 1 || count == '1'
singular
elsif plural
if (count == 2 || count == 3 || count == 4 || count == '2' || count == '3' || count == '4')
plural
elsif even_more
even_more
else
plural
end
elsif Object.const_defined?("Inflector")
Inflector.pluralize(singular)
else
singular + "s"
end
end
end
end
end

Po reštartovaní servera, možeme začať používať helper pluralize s troma parametrami, ktoré nám umožnia dosiahnuť výstup zodpovedajúci slovenským pravopisným pravidlám. Napr.:

Vstávam za <%= pluralize(@count,'hodinu','hodiny','hodín') %>.