Мультиязычность - перевод выпадающих списков

Материал из Umicms
Перейти к:навигация, поиск

Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php, после слов TODO:

public function optionslang($objcet_id, $title){
    $cor = cmsController::getInstance();  
    $id = (int) $objcet_id; 
    $cur_lang_prefix = $cor->getLang()->getPrefix();
    if($cur_lang_prefix == 'ru') return $title;
    $object = umiObjectCollection::getInstacne()->getObject($id);
    if($object instanceof umiObject){
      if($value = $object->getValue($cur_lang_prefix)){
        return $value; 
      }else{
        return $title; 
      }
    }
  }

Перед его использованием необходимо открыть на редактирование справочник, в который необходимо добавить переводы полей (модуль "Шаблоны данных" - "Справочники"). В справочник необходимо добавить группу полей, а также поля с идентификатором = префиксу языковой версии сайта, допустим: en, fr, de, сам тип поля выбираем "Строковый". Далее необходимо открыть содержимое справочника и для каждого элемента прописать переводы, в только что созданных полях.

Если для формирования выпадающего списка вы используете блок search_block_line_relation, то необходимо также добавить блок search_block_line_item_relation (tpls/catalog/search.tpl):

$FORMS['search_block_line_item_relation'] = <<<END
<option value="%object_id%">%custom optionslang(%object_id%, %object_name%)%</option>
END;

Если используется блок reflection_field_relation, то добавляем блок reflection_field_relation_option (tpls/data/reflection/webforms.tpl):

$FORMS['reflection_field_relation_option'] = <<<END
<option value="%id%">%custom optionslang(%id%, %name%)%</option>
END;

Суть использования кастомного макроса в том, что мы в него передаем object_id элемента выпадающего списка и название этого объекта (элемента списка), в самом макросе стоит проверка, если текущий язык ru, то возвращается исходное название объекта, если текущий язык не ru, то и из объекта берется значение поля с идентификатором равным префиксу текущей языковой версии сайта.