[РЕШЕНО] Как перевести собственное значение раскрытого фильтра вместо any?

Главные вкладки

Аватар пользователя Zooey Zooey 4 февраля 2017 в 0:22

Добрый день.
Имеется многоязычный сайт. Проблема с раскрытым фильтром, а точнее с его значением -any-. Мне необходимо заменить его на свое значение и добавить переводы для каждого языка. На данный момент значения задаются для каждого языка через template.php, но данный способ временный, т к клиент не может копаться в коде и добавлять там значения сам. Возможно ли как то решить данную проблему через перевод интерфейса?
например вместо -any- мы добавляем строку "свое значение". Тогда для английского будет перевод "its meaning"

Комментарии

Аватар пользователя Orion76 Orion76 4 февраля 2017 в 0:50

Если в template.php то просто замените пункт в списке значений для селекта, обозначающий это самое "any" на t('any') и добавьте переводы для нужных языков через стандартную систему переводов Drupal.

Если сайт собран более-менее стандартно, то должно работать..
Если нет, то модули Вам не помогут, а только специалист, способный вникнуть в проблему и решить ее..

PS.. Офигеть.. да мы с Вами еще и земляки-) Самарских тут редко встретишь.. Ну удачи в этом нелегком деле-)

Аватар пользователя Zooey Zooey 4 февраля 2017 в 1:00

Вы имеете в виду что то вроде:
$form['shs_term_node_tid_depth']['#options']['All'] = t('Свое значение'); ?
Я могу добавить ему переводы, но они не отображаются почему-то....

Да, самарских тут мало - видимо друпал их не впечатляет

Аватар пользователя bumble bumble 4 февраля 2017 в 7:55
1

Стандартное - Any - есть в переводах (см. скрины из аттача), но вот чтоб перевести для английского языка - только наверно, через создание фейкового английского (по-сути будет дублем английского, но с возможностью перевода).

Orion76 wrote:

Самарских тут редко встретишь..

Zooey wrote:

самарских тут мало

Можно даже посчитать: Самара / Samara

ЗЫ - сорри за офтоп.

Аватар пользователя Orion76 Orion76 4 февраля 2017 в 10:23

Zooey wrote:

Я могу добавить ему переводы, но они не отображаются почему-то....

Вот и я про то же..
Без полного понимания, почему это происходит, какие-либо советы давать смысла нет..

Ок.. давайте порешаем квест-)

Значит, получается, вставка локализованного лэйбла(перевода) для значения "All" в #options как строки - работает, а как результат функции t() не работает?

Вообще.. чем больше информации о поведении этих самых переводов предоставите, тем больше вероятность, что мы этот квест пройдем с положительным результатом-)

Аватар пользователя Zooey Zooey 4 февраля 2017 в 19:40

Хорошо. Сейчас подробно опишу.
в 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. И потом оно тоже появлялось в переводе интерфейса. К нему так же успешно добавлялись переводы, но к сожалению на всех языках отображалось значение "свое значение"

Аватар пользователя bumble bumble 4 февраля 2017 в 19:35
1

t('новое значение'); - не используйте символы отличные от латиницы в данной функции!

Пишите там английский вариант (в t()), а в интерфейсе - переводите на русский.

Аватар пользователя Zooey Zooey 4 февраля 2017 в 19:49

Добавила как вы и сказали английский вариант "new label", перевела на русский язык. на русском отображается нужное значение, на всех остальных языках переводы any

Аватар пользователя Zooey Zooey 4 февраля 2017 в 20:04

все заработало, спасибо. Кеш забыла почистить.
А с чем связано что необходимо латиницей писать?

Аватар пользователя bumble bumble 4 февраля 2017 в 20:03
1

Давайте логичнее размышлять.

Если нам нужно переводить это поле для всех языков - зачем условие?

Выносите за рамки условия - и перевод будет доступен для всех языков.

Аватар пользователя bumble bumble 5 февраля 2017 в 17:42

Английский - язык по умолчанию.

Все выводится на английском, и переводится на остальные. В т.ч. строки.
Так построена логика работы системы.

UPD - также, есть общепринятые практики программирования, согласно которым - использование не латинских символов в функции перевода строк является "плохим тоном".

С тем же успехом можно давать переменным кириллические (или иные отличные от латиницы символы) названия, или использовать кириллические ключи массивов, в разработке.