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') %>.

Trackbacks

    No Trackbacks

Comments

Display comments as (Linear | Threaded)

    No comments


Add Comment


Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA