2012-05-12 7 views

ответ

0

Короткий ответ: перевод категорий еще не поддерживается. В качестве обходного пути вы можете использовать функцию stranslation строки joomla. Мое оправдание быстрому и грязному прикосновению дизайна: главной целью было изменение перевода для администратора в бэкэнд без каких-либо изменений в коде администрирования. В приведенном ниже примере занимает немецкий в качестве базового языка это означает:

  1. каждое имя категории вводится на немецком языке (например, «Katgeorie 1»)
  2. мы создаем новую константу с равным именем, как его немецкой версии, но модифицированы для возможностей пространства имен (например, «CATEGORY1»). Это позволит автоматическое сопоставление.
  3. в коде шаблона мы заменяем выходы категории, если мы находимся на другой языковой странице, чем оригинал (здесь немецкий).

Следующие функции помогают автоматически получать правильные постоянные значения на других языках.

/** 
* Remove umlauts and special chars. 
*/ 
if(!function_exists('toASCII')) { 
    function toASCII($str) { 
     $str = mb_strtolower($str,'UTF-8'); // Useful if the current server setting is not UTF-8 
     //$str = strtolower($str); 
     $str = preg_replace('#ß#' , "ss", $str); // maps German ß onto ss 
     $str = preg_replace('#ä#' , "ae", $str); // Æ => AE 
     $str = preg_replace('#ö#' , "oe", $str); // Œ => OE 
     $str = preg_replace('#ü#' , "ue", $str); // œ => oe 
     $str = preg_replace('#Ä#' , "ae", $str); // Æ => AE 
     $str = preg_replace('#Ö#' , "oe", $str); // Œ => OE 
     $str = preg_replace('#Ü#' , "ue", $str); // œ => oe 
     $str = preg_replace('# #' , "", $str);  // remove spaces 
     $str = preg_replace('#-#' , "", $str);  // remove hyphens 
     $str = preg_replace("#'#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#/#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#\(#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#\)#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#\.#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#,#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#\[#" , "", $str);  // remove apostrophs 
     $str = preg_replace("#\]#" , "", $str);  // remove apostrophs 
     // Process all other special chars 
     $str = strtr(utf8_decode($str), 
       utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'), 
       'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'); 
     return strtoupper($str); 
    } 
} 

function translate($de_string) { 

    // Translate all JoomGallery category names 
    $menu = JFactory::getApplication()->getMenu(); 
    $active = $menu->getActive(); 
    $activeItemLanguage = $active->language; 
    $lang = substr($activeItemLanguage, 0, 2); 

    // Do not translate german category names 
    $trans_str = $de_string; 
    if ($lang != "de") { 
     // Parse all category names and replace them with an existing override-string. 
     $const = toASCII($trans_str); 
     $trans_str = JText::_($const); 
    } 
    return $trans_str; 
} 

Как использовать это: заменить строковые функции в шаблонах, которые показывают названия категорий:

<?php echo translate($this->escape($row->name)); ?> 

вместо

<?php echo $this->escape($row->name); ?>