Відмінювання слова «коментар» у Disqus
Як і майже у всіх платформах коментування, в Disqus є проблема з відмінюванням кількості коментарів. В англійській мові з одниною і множиною все просто, є comment, і є comments. Розробники переважно не вникають в особливості інших мов, і дозволяють тільки три опції для відображення кількості коментарів — опція для однини, опція для множини, і ше одна опція, коли коментарів зовсім нема. Англійською все добре:
None comments
One comment
%num% comments
Але в багатих слов’янських мовах з’являються проблеми, трьох опцій не досить, може бути і коментар, і коментарі, і коментарів. Це вже три опції + треба ше одну для нуля коментарів. Тому
%num% коментарівперетворюється на:
2 коментарів
Шо невимовно бісить, доводиться викручуватись якось так:
%num% коментарі(в)
або
Коментарів: %num%
А це теж чіпляє чутливу душу граматичного нациста, хочеться нормальних людських відмінювань.
Тепер по суті. Виправити це в Disqus можна, якщо трошки підправити деякі скрипти.
На сторінці налаштувань Disqus є доступ до цих самих трьох опцій, але нам їх мало, тому треба знайти спосіб виводити кількість коментарів правильно.Який взагалі у Disqus механізм відображення кількості коментарів до запису. Нехай запис знаходиться на сторінці http://example.com/post.html. Тоді в тому місці, де треба вивести к-сть коментарів, треба додати щось таке:
І в футері сторінки вставити такий скрипт:
Цей скрипт проходиться по сторінці, шукає всі посилання, href яких містить #disqus_thread, йде на сервер Disqus'у, десь там дивиться, скільки є коментарів до запису з такою адресою, а тоді заміняє вміст тих посилань на власне кількість коментарів.
Бачимо, що у цьому скрипті нічого схожого на виведення кількості коментарів нема, але він звертається до іншого скрипта count.js, вочевидь, там все і відбувається. Йдемо за адресою, там такий скрипт без whitespace'ів.
Пропускаємо його через jsbeautifier.org, отримуємо таке:
В це теж не хочеться вникати, незрозумілі назви змінних і всяке таке. Якщо поверхнево, то є дві функції, getCount() i displayCount(). Логічно припустити, шо нам треба displayCount(). Бачимо там такий шматок коду:
Здається, тут якраз і відбувається те, шо нам треба. Є якесь b.comments, очевидно, шо це і є кількість коментарів до запису, бо далі в switch там перебираються випадки 0, 1 і решта. Після switch відбувається ше якась фігня, а потім в циклі ше шось. Можу тільки здогадуватись, шо там у змінних a, b, c i d, але це не суттєво, ніколи не треба без потреби розбиратись в чужому коді :). Достатньо бачити, що десь звідкись береться кількість коментарів, потім в циклі в якихось об’єктів заміняється innerHTML. Ясно, що ті об’єкти — це і є посилання з #disqus_thread, і їх вміст міняється на кількість коментарів. Отже в тому for нам треба міняти c[d].innerHTML на правильну кількість коментарів замість тої, яку видає Disqus. Переписуємо функцію displayCount() по-своєму:
Круто, тепер треба, щоб Disqus звертався до нашого скрипта, а не до свого. Повертаємось до того скрипта, що у футері сайту, міняємо там рядок з адресою потрібного скрипта. Хоч він знаходиться нижче коментаря «/* * * DON'T EDIT BELOW THIS LINE * * */». Правила деколи треба порушувати :)
І ура, все працює, можна насолоджуватись правильним відмінюванням. Отже, наш перероблений скрипт comments-count.js:
І перероблений скрипт у футері сайту, який буде звертатись до нашого скрипта:
Все. Хай живе граматика.