Dokonalý překlad počtu komentářů ve WordPress šabloně

Při překladu WordPress šablony narazíme na problém, jak se vypořádat se skloňováním slova “komentář” při zobrazení počtu komentářů. Oproti angličtině má totiž čeština o jeden možný tvar víc.

Tam kde si angličtina vystačí s No comments, one comment a more comments potřebuje čeština tyto tvatry: “Žádný komentář”, “1 komentář”, “2 komentáře”, “5 komentářů”.

Problém je právě s těmi dvěma komentáři. Způsobů jak tento problém při překladu obejít je jistě více. Já vám představím dva. Jeden je opravdu obezličkou, druhý je propracovanější.

Chytrý překlad

Pro překlad počtu komentářů nám slouží parametry funkce comments_popup_link(). Využití této funkce použité v defaultní šabloně WordPress 2.9:

comments_popup_link('No Comments »', '1 Comment »', '% Comments »');

Jak je vidět, můžeme napřekládat bez problému zobrazení pro žádný komentář i jeden komentář, ale poté máme problém s 2,3,4 a nebo více komentáři. Zvolíme ‘% komentářů” nebo ‘% komentáře’? Ani jedna volba není ta správná. Po troše přemýšlení můžeme naše dilema vyřešit dvojtečkou.

comments_popup_link('Žádné komentáře »', '1 Komentář »', 'Komentářů: % »');

Jednoduché, ovšem těžko říct, jak moc elegantní řešení to je.

Využití hooku

Při tomto řešení využijeme toho, že funkce comments_number() zpřístupňuje hook comments_number. Na tento hook pověsíme vlastní funkci, přidávající hodnotu pro počet komentářů v rozpětí od 2 do 4, včetně krajních hodnot.

Stačí vložit následující kód do souboru functions.php:

function czech_comments_number($output, $number){
	if ( $number > 1 && $number <= 4)
		$output = str_replace('%', number_format_i18n($number), '% Komentáře');
	return $output;
 
}
 
add_action('comments_number', 'czech_comments_number', 10, 2);

A to poté bude fungovat v kombinaci s voláním funkce commnets_popup_link() z vaší šablony, kde si napřekládáte text pro počet komentářů 0, 1 a více jak 4:

comments_popup_link('Žádné komentáře »', '1 komentář »', '% komentářů »');

Je možné, že naše šablona někde využívá funkci comments_number() přímo, v tom případě i ji budem volat se tejnými parametry jako funci comments_popup_link a i tato funkce vrátí kýžený výsledek.

Reference:

http://codex.wordpress.org/Function_Reference/comments_popup_link

http://core.trac.wordpress.org/browser/tags/3.0.3/wp-includes/comment-template.php

http://codex.wordpress.org/Function_Reference/comments_number

http://codex.wordpress.org/Function_Reference/add_action

http://codex.wordpress.org/Function_Reference/apply_filters