Вы здесь

Как вывести значение селект-поля на нужном языке?

0

Добрый вечер!
В ноде есть поле типа Список. В него забиты значения. Значения вручную через интерфейс перевода переведены на 6 языков сайта. При переключении языка значение поля на странице соответственно переводится.

Но мне нужно на русской странице ноды вывести значение этого поля на немецком языке (например).

Пытаюсь получить значение поля через страндартную функцию t() таким образом:

    $context = 'field_zodiac:#allowed_values:Virgo';
    $val = t('Virgo', array(), array('langcode' => 'de', 'context' => $context)); 
    print $val;

Контекст беру строго со страницы перевода интерфейсов (/admin/config/regional/translate/translate). Но подобный подход не работает - всегда выводит английский вариант. Пробовал для разных значений разных селектов - всегда выводит только английское значение.

Попробовал тот же трюк, но со стандартной строкой месяца:

    $context = 'Long month name';
    $val = t('May', array(), array('langcode' => 'de', 'context' => $context)); 
    print $val;

И всё работает идеально! Переводится на нужный язык. То есть проблема, когда пытаешься получить перевод значения именно select поля.

Подскажите, пожалуйста, что можно сделать с этим? Или как другим способом (не через t()) получить перевод на все языки нужного мне значения селект-поля ?

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

Версия Drupal: 
7.x
Категория: 
Multilingual
Вопрос задан 12.02.2018 - 23:42
Аватар пользователя Quty
Quty
30

C помощью какого модуля переведены значения? Если i18n_field то копайте функции
i18n_field_translate_allowed_values
i18n_field_translate_property
i18n_string_translate
i18n_string_object_translate

Комментарий оставлен 6 дней назад

Да, i18n_field
Пошёл копать.. спасибо.
В описание задачи - добавил UPD c новым наблюдением

Комментарий оставлен 6 дней назад

Ответы

0

Большое спасибо xandeadx за наводку на i18n_field_translate_allowed_values
Не сразу понял, что поля переводят отдельным модулем i18n_field

Решение проблемы:

$field =  field_info_field('field_name');  // получаем объект поля с селектом по имени field_name
i18n_field_translate_allowed_values($field, 'de')); // получаем массив всех значений селекта на нужном языке. В ключах английские значения поэтому очень легко достать перевод конкретного значения
Ответ дан 13.02.2018 - 00:22
Аватар пользователя Quty
Quty
30