Добрый день.
Имеется многоязычный сайт. Проблема с раскрытым фильтром, а точнее с его значением -any-. Мне необходимо заменить его на свое значение и добавить переводы для каждого языка. На данный момент значения задаются для каждого языка через template.php, но данный способ временный, т к клиент не может копаться в коде и добавлять там значения сам. Возможно ли как то решить данную проблему через перевод интерфейса?
например вместо -any- мы добавляем строку "свое значение". Тогда для английского будет перевод "its meaning"
Комментарии
Если в template.php то просто замените пункт в списке значений для селекта, обозначающий это самое "any" на t('any') и добавьте переводы для нужных языков через стандартную систему переводов Drupal.
Если сайт собран более-менее стандартно, то должно работать..
Если нет, то модули Вам не помогут, а только специалист, способный вникнуть в проблему и решить ее..
PS.. Офигеть.. да мы с Вами еще и земляки-) Самарских тут редко встретишь.. Ну удачи в этом нелегком деле-)
Вы имеете в виду что то вроде:
$form['shs_term_node_tid_depth']['#options']['All'] = t('Свое значение'); ?
Я могу добавить ему переводы, но они не отображаются почему-то....
Да, самарских тут мало - видимо друпал их не впечатляет
Стандартное - Any - есть в переводах (см. скрины из аттача), но вот чтоб перевести для английского языка - только наверно, через создание фейкового английского (по-сути будет дублем английского, но с возможностью перевода).
Можно даже посчитать: Самара / Samara
ЗЫ - сорри за офтоп.
Вот и я про то же..
Без полного понимания, почему это происходит, какие-либо советы давать смысла нет..
Ок.. давайте порешаем квест-)
Значит, получается, вставка локализованного лэйбла(перевода) для значения "All" в #options как строки - работает, а как результат функции t() не работает?
Вообще.. чем больше информации о поведении этих самых переводов предоставите, тем больше вероятность, что мы этот квест пройдем с положительным результатом-)
Хорошо. Сейчас подробно опишу.
в template.php я вставила функцию
<?php
function my_theme_form_alter(&$form, $form_state, $form_id) {
global $language;
if($form_id=='views_exposed_form'){
if($form_state['view']->name == 'search_tour') {
if ($language->language=='ru') {
$form['shs_term_node_tid_depth']['#options']['All'] = t('новое значение');
}
}
}
}
?>
После этого в переводе интерфейса данное значение появилось (см. скрин). Я его успешно перевела на все доступные языки.
Но при переключении языка в фильтре значение не переводится. Там отображается any на разных языках. Что я делаю не так?
Я пробовала и другой способ - в настройках представления я добавляла значение вместо any. И потом оно тоже появлялось в переводе интерфейса. К нему так же успешно добавлялись переводы, но к сожалению на всех языках отображалось значение "свое значение"
t('новое значение'); - не используйте символы отличные от латиницы в данной функции!
Пишите там английский вариант (в t()), а в интерфейсе - переводите на русский.
Добавила как вы и сказали английский вариант "new label", перевела на русский язык. на русском отображается нужное значение, на всех остальных языках переводы any
Так у Вас ведь условие:
<?php
if ($language->language=='ru')
?>
Все - правильно.
все заработало, спасибо. Кеш забыла почистить.
А с чем связано что необходимо латиницей писать?
Давайте логичнее размышлять.
Если нам нужно переводить это поле для всех языков - зачем условие?
Выносите за рамки условия - и перевод будет доступен для всех языков.
Английский - язык по умолчанию.
Все выводится на английском, и переводится на остальные. В т.ч. строки.
Так построена логика работы системы.
UPD - также, есть общепринятые практики программирования, согласно которым - использование не латинских символов в функции перевода строк является "плохим тоном".
С тем же успехом можно давать переменным кириллические (или иные отличные от латиницы символы) названия, или использовать кириллические ключи массивов, в разработке.