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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Если необходимо для другой языковой версии сайта перевести названия элементов выпадающе…»)
 
Строка 1: Строка 1:
Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php
+
Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле classes/modules/custom.php, после слов TODO:
 
<source lang="php">
 
<source lang="php">
 
public function optionslang($objcet_id, $title){
 
public function optionslang($objcet_id, $title){
     $cor = cmsController::getInstance();
+
     $cor = cmsController::getInstance()
 +
    $id = (int) $objcet_id;  
 
     $cur_lang_prefix = $cor->getLang()->getPrefix();
 
     $cur_lang_prefix = $cor->getLang()->getPrefix();
 
     if($cur_lang_prefix == 'ru') return $title;
 
     if($cur_lang_prefix == 'ru') return $title;
     $object = umiObjectCollection::getInstacne()->getObject($object_id);
+
     $object = umiObjectCollection::getInstacne()->getObject($id);
 
     if($object instanceof umiObject){
 
     if($object instanceof umiObject){
 
       if($value = $object->getValue($cur_lang_prefix)){
 
       if($value = $object->getValue($cur_lang_prefix)){
 
         return $value;  
 
         return $value;  
       }esle{
+
       }else{
 
         return $title;  
 
         return $title;  
 
       }
 
       }
Строка 16: Строка 17:
 
</source>
 
</source>
  
Перед его использованием необходимо открыть на редактирование ваш справочник (модуль Шаблоны данных - Справочники), добавить в него поля с идентификатором = префиксу языковой версии сайта. Далее необходимо открыть содержимое справочника и для каждого элемента прописать переводы, в только что созданных полях.
+
Перед его использованием необходимо открыть на редактирование справочник, в который необходимо добавить переводы полей (модуль "Шаблоны данных" - "Справочники"). В справочник необходимо добавить группу полей, а также поля с идентификатором = префиксу языковой версии сайта, допустим: en, fr, de, сам тип поля выбираем "Строковый". Далее необходимо открыть содержимое справочника и для каждого элемента прописать переводы, в только что созданных полях.
  
При использовании блока search_block_line_item_relation, когда формируются элементы выпадающего списка, в данный блок передаются параметры object_id и object_name, их и передадим в наш кастомный макрос. Вызов следующий:
+
Если для формирования выпадающего списка вы используете блок '''search_block_line_relation''', то необходимо также добавить блок '''search_block_line_item_relation''' (tpls/catalog/search.tpl):
%custom optionslang(%object_id%, %object_name%)%
+
<pre>
 +
$FORMS['search_block_line_item_relation'] = <<<END
 +
<option value="%object_id%">%custom optionslang(%object_id%, %object_name%)%</option>
 +
END;
 +
</pre>
 +
 
 +
Если используется блок '''reflection_field_relation''', то добавляем блок '''reflection_field_relation_option''' (tpls/data/reflection/webforms.tpl):
 +
<pre>
 +
$FORMS['reflection_field_relation_option'] = <<<END
 +
<option value="%id%">%custom optionslang(%id%, %name%)%</option>
 +
END;
 +
</pre>
 +
 
 +
Суть использования кастомного макроса в том, что мы в него передаем object_id элемента выпадающего списка и название этого объекта (элемента списка), в самом макросе стоит проверка, если текущий язык ru, то возвращается исходное название объекта, если текущий язык не ru, то и из объекта берется значение поля с идентификатором равным префиксу текущей языковой версии сайта.

Версия 19:20, 31 октября 2010

Если необходимо для другой языковой версии сайта перевести названия элементов выпадающего списка, то для выполнения данной задачи можно воспользоваться кастомным макросом, который пропишем в файле 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, то и из объекта берется значение поля с идентификатором равным префиксу текущей языковой версии сайта.