Многие, включая меня, жаловались на неправильную кодировку слова "Голоса" или "Голосовать" как����������
Поскольку местная поддержка не высказала ни одной дельной мысли, пришлось кумекать самому.
И вот, что я обнаружил:
Проблема номер один.Основная проблема в том, что красавчеги-разработчеги Mosets Tree используют strtolower для конвертации заглавной буквы в строчную в этом слове. Убедимся в этом открыв sub_listingDetails.tpl.php и начиная со строки 125 видим:
if( $this->link->link_votes <= 1 ) {
echo $this->link->link_votes . " " . strtolower(JText::_( 'Vote' ));
} elseif ($this->link->link_votes > 1 ) {
echo $this->link->link_votes . " " . strtolower(JText::_( 'Votes' ));
}
Использование strtolower в случае, когда заранее известна необходимость поддержки кодировки UTF граничит с идиотизмом.
Руководство по PHP ясно говорит, что
Returns string with all alphabetic characters converted to lowercase.
Note that 'alphabetic' is determined by the current locale. This means that in i.e. the default "C" locale, characters such as umlaut-A (Ä) will not be converted.
Проще говоря, это работает для ASCII и тамошние дальнейшие примеры изобилуют решениями для нелатинских алфавитов.
Как этой беде помочь?
Можно использовать mb_convert_case, но тут мы сталкиваемся проблемой номер два.
Проблема номер два.Красавчеги-разработчеги Mosets Tree не отличают глаголов от существительных. В английском такая глупость позволительна чаще, чем в русском, но мы в данном случае, получим "1 голосовать", то есть надо доделывать ещё и языковые константы. Поскольку существительное "голосов" всё-равно не будет стыковаться с числительным, то проще и корректнее использовать давнишний русский приём двоеточия - "Голосов: 1".
Как это сделать?
Открываем вышеуказанный файл - sub_listingDetails.tpl.php - и заменяем указанные строки 125-129 на одну такую строку:
echo JText::_( 'Votes' ). ": " . $this->link->link_votes ;
Всё.