2013-03-19 51 views
1

我正在寫一個自定義的自定義組件,我試圖讓組件 的名單,這是我的模型功能的Joomla 2.5 JText :: _()未解析組件名字

function getComponents() 
{ 
    // Initialise variable 
    $db  = JFactory::getDbo(); 
    $query = $db->getQuery(true); 

    // Get components with permissions  
    $query->select('name AS value, title AS text, level AS level, rules AS rules') 
     ->from('#__assets') 
     ->where('level > 0') 
     ->where('rules !='.$db->Quote('{}')) 
     ->order('value'); 

    $options = $db->setQuery($query)->loadObjectList(); 

    $levels=array(); 
    if (count($options)) { 
     foreach ($options as &$option) { 
      // Translate component name 
      $option->rules = array_keys(get_object_vars(json_decode($option->rules))); 
      $option->text = JText::_($option->text); 
      $levels[$option->level][] = $option; 
     } 

     // Sort by component name 
     $lang = JFactory::getLanguage(); 
     JArrayHelper::sortObjects($options, 'text', 1, true, $lang->getLocale()); 
    } 

    return $levels; 
} 

我的問題是該JText::_($option->text);只翻譯我的組件的名稱,而其他人保持不變。 我的方法有什麼問題?

+0

var_dump($ option-> text)會打印什麼? – 2013-03-19 13:15:38

+0

var_dump($ option-> text)= string(7)「com_zoo」 – G3z 2013-03-19 13:48:14

+0

啓用語言調試程序並檢查包含com_zoo的語言文件是否實際加載。另外,也許不相關,我不確定它是否是要求,但通常語言字符串是大寫字母。 – 2013-03-19 13:53:36

回答

0

我做了一些在joomla代碼的研究,正好在com_installer瞭解joomla如何做我想做的。 Marko D是正確的,但答案是「不完整的」,所以如果你想要把所有組件的名稱,在這裏你有完整的片段:)

$extension = 'com_helloworld'; 
$lang = JFactory::getLanguage(); 
$source = JPATH_ADMINISTRATOR . '/components/' . $extension; 
$lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, false) 
    || $lang->load("$extension.sys", $source, null, false, false) 
    || $lang->load("$extension.sys", JPATH_ADMINISTRATOR, $lang->getDefault(), false, false) 
    || $lang->load("$extension.sys", $source, $lang->getDefault(), false, false); 

$componentName = JText::_($option->text); 

我希望它能幫助,歡呼聲。

0

JText將僅在當前組件的語言文件中查找翻譯。

一種解決辦法是,看文檔爲Loading_extra_language_files,你可以使用類似

$lang = JFactory::getLanguage(); 
$extension = 'com_helloworld'; 
$base_dir = JPATH_SITE; 
$language_tag = 'en-GB'; 
$reload = true; 
$lang->load($extension, $base_dir, $language_tag, $reload); 

您將需要加載語言文件對於要翻譯的所有組件。然後JText應該做正確的翻譯

+0

您的建議適用於大多數組件,其他一些像動物園'com_zoo'沒有翻譯,我看到他們是一個'?? com_zoo ??'語言調試啓用(意思是joomla不能)翻譯他們。有線 – G3z 2013-03-20 16:51:25