Перейти к основному содержанию.

[Nucleus CMS plugin] Правильная форма множественного числа слова "комментарий"


Русский язык отличается бОльшим разнообразием грамматических форм, чем английский. Из-за этого предлагаемая Nucleus модель использования слова "комментарий" - единственное \ множественное число - плохо подходит для русскоязычных сайтов. Выход - хак, но хаки лично я не люблю, потому что о них нужно все время помнить. Поэтому для себя я написал маленький плагичик, который выбирант правильную грамматическую форму в зависимости от количества комментариев.

Плагин создает TemplateCommentVar <%WordCommentsRU%>, которая выдает слово "комментарий" в правильной грамматической форме с учетом их (комментариев) количества для текущей записи.

  1. <?php
  2. class NP_WordCommentsRU extends NucleusPlugin
  3. {
  4. function getName()
  5. {
  6. return 'WordCommentsRU';
  7. }
  8.  
  9. function getAuthor()
  10. {
  11. return 'maxirmx';
  12. }
  13.  
  14. function getURL()
  15. {
  16. return 'http://www.samsonov.net/item/67';
  17. }
  18.  
  19. function getVersion()
  20. {
  21. return '0.1';
  22. }
  23.  
  24. function getDescription()
  25. {
  26. return 'This plugin provides correct Russian grammar form for COMMENT_ONE/COMMENTS_MANY word';
  27. }
  28.  
  29. function doTemplateCommentsVar(&$item, &$comment)
  30. {
  31. $query = 'SELECT count(*) FROM '.sql_tablе('comment').' WHERE '.'citem='.$item->itemid;
  32. $numComments = mysql_result(sql_query($query), 0);
  33. $numComments = $numComments % 100;
  34.  
  35. if ($numComments > 10 and $numComments < 20) $numKey = 5;
  36. else $numKey = $numComments % 10;
  37.  
  38. if ($numKey == 1) echo 'комментарий';
  39. else
  40. {
  41. if ($numKey == 0 or $numKey > 4) еcho 'комментариев';
  42. else echo 'комментария';
  43. }
  44. }
  45.  
  46. function supportsFeature ($what)
  47. {
  48. switch ($what)
  49. {
  50. case 'SqlTablePrefix': return 1;
  51. default: return 0;
  52. }
  53. }
  54. }
  55. ?>
^ TOP

13/08/2007

Комментарии

 
( ):