Вы здесь

Как перевести строку, находящуюся в коде модуля?

0

Имеется установленный модуль Best Answer (https://www.drupal.org/project/best_answer). Все его непереведенные на русский строки, я удачно перевожу на странице "Перевод интерфейса" (admin/config/regional/translate/translate). Лишь одна строчка не поддается переводу. Если навести курсор на значок "Best" появляется всплывающая подсказка на английском "Select As Best Answer"

Найти и перевести эту строчку обычным способом не получается.
Поиском по файлам модуля нашел эту строчку в файле "best_answer.module".

$node->content['select_best_answer'] = array(
        '#type' => 'item',
        '#prefix' => '<a class="best-answer-select-answer" href=' . $redirect_path . ' title="Select As Best Answer">',
        '#suffix' => '</a>',
        '#weight' => -20,
      );

Обрадовался было сначала. Заменил её на свой перевод "Выберите, как лучший ответ". В результате выводятся крякозяблины:

Видимо PHP не воспринимает эту кодировку. Как быть? Имеется ли простое решение? Не хотелось бы из-за одной строчки устанавливать дополнительные модули.

Версия Drupal: 
7.x
Категория: 
Multilingual
Вопрос задан 02.02.2016 - 21:50

С PHP не знаком, но может быть в таких случаях имеется возможность вместо символов (букв) указывать соответствующие им коды? На сайте других языков, кроме русского, не будет

Комментарий оставлен 02.02.2016 - 22:07

Ответы

-1

Сохраните тот файл что редактируете в кодировке utf-8, а не ANSI

Ответ дан 02.02.2016 - 22:05

Спасибо большое, все заработало. Я догадывался, что дело в кодировке, но менять установленную автором модуля кодировку в голову не пришло. Странно почему они сразу не сохраняют в utf и не выносят строки в какие нибудь внешние константы.

Комментарий оставлен 02.02.2016 - 22:13
2

Более правильно - выводить текст с помощью функции t(). Тогда текст будет переводимый (можно будет в переводах найти и перевести строку):

'#prefix' => '<a class="best-answer-select-answer" href=' . $redirect_path . ' title="' . t('Select As Best Answer') . '">',

Еще более правильно - переопределить вывод в своем модуле или в template.php текущей темы, а не в коде модуля.

Ответ дан 02.02.2016 - 22:31

Если обернуть в функцию, не срабатывает. Вернул кодировку в АНСИ. Добавил t, как вы посоветовали

$redirect_path . ' title="t(Select As Best Answer)">',

Но

Переопределять к сожалению я пока что ничего не умею. Совсем недавно с Joomla на Drupal перебрался. Осваиваюсь только.

Комментарий оставлен 02.02.2016 - 22:50

t() это функция. Некорректно вписали ее в тайтл - как обычный текст. Вот и выводится как текст.
по ссылке как правильно ее использовать

Комментарий оставлен 02.02.2016 - 23:08

Да, я понял, что некорректно. Написал так как изначально посоветовали. Сейчас вижу там другие строки. Но они тоже не работают почему то: весь сайт падает с ошибкой

Parse error: syntax error, unexpected T_AS in

title="' . t(Select As Best Answer) . '">'

Но это уже не актуально, вопрос решен. Воспользуюсь вашим (первым) советом.
Спасибо за помощь!

Комментарий оставлен 02.02.2016 - 23:12

Да, @voviko правильно написал. Я кавычки не поставил - исправляю.

Комментарий оставлен 03.02.2016 - 14:50