2012-05-12 79 views

回答

0

簡答:目前還不支持類別翻譯。作爲解決方法,您可以使用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); ?>